On Apr 8, 2009, at 2:13 AM, Dave Brown wrote:

> But why is this deadlocking at all? I thought there shouldn't be a
> problem doing this, especially since thread B is using a transaction.
> Shouldn't either A or B prevent the other one from accessing the
> database until they are done?


It is a problem because people have asked for more concurrency.  So we  
provide more concurrency.  But concurrency comes at a price: namely  
the danger of a deadlock.

You can do "BEGIN EXCLUSIVE" to absolutely prevent the deadlock.  This  
will also prevent any possibility of concurrency.

Or, since you are dealing with threads within a process, enable shared- 
cache mode and then on the reader thread set "PRAGMA  
read_uncommitted=ON".  This will allow the reader to see uncommitted  
changes from the writer, and hence never block for anything.  You will  
get great concurrency and no possibility of deadlock.  The downside  
there is that you lose isolation - the "I" in "ACID".

Choose your poison.

D. Richard Hipp
d...@hwaci.com



_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to