Chapter 4. Concurrency

Table of Contents

Which BDB XML Handles are Free-Threaded
Locks, Blocks, and Deadlocks
Locks
Blocks
Deadlocks
The Locking Subsystem
Configuring the Locking Subsystem
Configuring Deadlock Detection
Resolving Deadlocks
Isolation
Supported Degrees of Isolation
Reading Uncommitted Data
Committed Reads
Using Snapshot Isolation
Read/Modify/Write
No Wait on Blocks

BDB XML offers a great deal of support for multi-threaded and multi-process applications even when transactions are not in use. Many of BDB XML's handles are thread-safe, or can be made thread-safe by providing the appropriate flag at handle creation time, and BDB XML provides a flexible locking subsystem for managing containers in a concurrent application. Further, BDB XML provides a robust mechanism for detecting and responding to deadlocks. All of these concepts are explored in this chapter.

Before continuing, it is useful to define a few terms that will appear throughout this chapter:

Which BDB XML Handles are Free-Threaded

The following describes to what extent and under what conditions individual handles are free-threaded.

  • DbEnv

    Free-threaded so long as the DB_THREAD flag is provided to the environment open() method.

  • XmlManager

    This class free-threaded.

  • XmlTransaction

    Access must be serialized by the application across threads of control.

  • XmlContainer

    This class is free-threaded.

  • XmlDocument

    This class is not free-threaded, and it can be safely used only by one thread of control.

  • XmlIndexSpecification

    This class is not free-threaded, and it can be safely used only by one thread of control.

  • XmlMetaDataIterator

    This class is not free-threaded, and it can be safely used only by one thread of control.

  • XmlModify

    During construction this class is not free-threaded. However, once constructed the object can be safely used across multiple threads of control.

  • XmlQueryContext

    This class is not free-threaded, and it can be safely used only by one thread of control at a time.

  • XmlQueryExpression

    This class is not free-threaded, and it can be safely used only by one thread of control at a time.

  • XmlResolver

    If an application uses multiple threads, custom implementations of XmlResolver must be free threaded to allow multiple, simultaneous calls for resolution.

  • XmlResults

    This class is not free-threaded, and it can be safely used only by one thread of control at a time.

  • XmlStatistics

    This class is not free-threaded, and it can be safely used only by one thread of control at a time.

  • XmlTransaction

    This class is not free-threaded, and it can be safely used only by one thread of control at a time.

  • XmlUpdateContext

    This class is not free-threaded, and it can be safely used only by one thread of control at a time.

  • XmlValue

    This class is not free-threaded, and it can be safely used only by one thread of control at a time.