On 8/10/06, Eric van der Maarel <[EMAIL PROTECTED]> wrote:


John Stanton wrote:
> Why not make your application simple and use a mutex to synchronize your
> threads and serialize the database access?
Well, I figure, if the db has an advanced locking/synchronization
mechanism (that even makes a distinction between reads and writes),
using that will actually make my application easier since in general I
don't know which threads read and/or write. In the case of sqlite I can
do multi-threaded reads that don't lock at all.

You may want to surround your sqlite calls with reader-writer locks,
in that case.

>
> [EMAIL PROTECTED] wrote:
>> I have two threads heavily writing to the db. Hence, I get some
>> SQLITE_BUSY return values.
>>
>> If I get it from sqlite3_step(), I wait a few ms and call sqlite3_step()
>> again etc. This happens in one thread, thread A.
>>
>> The other thread (thread B) however, is calling the registered busy
>> handler while executing a commit with an sqlite3_exec() call. And this is
>> not going away either. even if I let thread A wait forever (so don't do
>> anything there) thread B is getting SQLITE_BUSY (in commit with
>> sqlite3_exec()). Both threads are not progressing any more...
>> Of course, both pieces of code run fine single-threaded :-)
>>
>> Btw sqlite does not detect it is going into a deadlock since I added a
>> log
>> indicating this in sqlite3BtreeBeginTrans() when it returns SQLITE_BUSY
>> without calling the handler, and this log is never appears.
>>
>> So, I realy don't understand why thread B is calling the busy handler and
>> that the lock is never going away.
>> And is the procedure in thread A correct: just wait and recall the
>> sqlite3_step(). Maybe this is the reason of the behaviour we see in
>> thread
>> B? How to overcome that situation then?
>>
>> Eric
>>
>
>
>

--
-------------------------------------------
| Eric van der Maarel                     |
| [EMAIL PROTECTED]                        |
-------------------------------------------^[ZZ



--
Cory Nelson
http://www.int64.org

Reply via email to