Transactions lock resources to regulate their sharing and isolation.
Locking may occur with any of the methods that interact with rows on the data source; these include IRowsetLocate::GetRowsAt, IRowsetLocate::GetRowsByBookmark, IRowsetUpdate::Update, and others. These operations take locks and may wait for locks to be released by other transactions. A lock held by another transaction usually does not invalidate an operation, but the lock delays the transaction until the other transaction has finished and releases the lock. Therefore, the default behavior on encountering a lock is to queue until it is released. There is a time limit on how long to queue before returning with a timeout failure, and the timeout can be set to zero for infinite timeout. These Various timeout settings are transaction options.
The provider implements locking using a strategy that corresponds to the isolation level. These strategies vary by provider.