We implement pthread read/write locks around Sqlite in a multi-threaded environment and disable the fcntl file locking and ignore busy logic. It has the downside of losing some concurrency compared to the Sqlite pending and reserved lock strategy, but we have not suffered a performance hit yet.

Using a mutex alone restricts concurrent reading, not a good idea.

Larry Lewis wrote:
Igor,

Thanks for your help.  I've tested the first case successfully.

For a multi-threaded application using an in-memory database (":memory:"), 
would you recommend:
  a) an external mutex to synchronize exclusive access to the database -- 
probably the safest
  b) an external read-write lock to allow concurrent reads but only one write 
(parallel of SQLite locking as I understand it)
  c) rely on SQLite locking and handle SQLITE_BUSY cases as described below

Both SELECTs and UPDATEs will be occurring from multiple threads approximately 
10 times/second, and my original question below will be quite common (SELECT a 
group of records and make UPDATEs as I step through them).

Larry

----- Original Message ----
Larry Lewis <lewislp-/[EMAIL PROTECTED]> wrote:

If I am stepping through the results of a SELECT and want to UPDATE
values in the currently selected row prior to completion of the
SELECT query, will this work?


Yes, in the recent enough SQLite version.


What if there is already a pending writer lock on the database from a
different thread?


SQLite will detect the deadlock, and fail your UPDATE statement with SQLITE_BUSY error. Your only option at this point would be to reset the SELECT statement and finish the transaction this query was part of (if any).

Igor Tandetnik

-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------





-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------



-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to