Thanks for your answering.
Actually, I am not trying to do lock-and-wait on file lock level. In my app, 
all operation is done on single process but different threads. I just want to 
simulate this using thread lock. So it may not cost too much time to do 
thread-switching. And thread lock have a timeout.
I will do some testing to check whether it isefficient. Thanks for 
youransweringagain.




????
???:R Smithrsmith at rsweb.co.za
???:sqlite-userssqlite-users at mailinglists.sqlite.org
????:2016?4?6?(??)?15:45
??:Re: [sqlite] Why SQLite use busy-retry but not lock-and-wait?


On 2016/04/06 6:03 AM, sanhua.zh wrote:  Recently, I am reading the source code 
of SQLite.  I found that on OS level, SQLite use file lock to solve 
multi-processes problem and use VFS to solve multi-threads problem. But all of 
them might failed with racing and SQLite will return a SQLITE_BUSY result code 
to make it sleep-and-retry.    I get confused of this code. Why SQLite use 
lock-and-wait? For example, in the unixLock, we can use F_SETLKW instead of 
F_SETLK, so that code will return immediatly when file unlocked. We have not 
need to sleep-and-retry, which may waste our running time.    So I think it 
might be a kind oftrick, but I don?t why SQLite do so. I already find out the 
www.sqlite.org, but it tells nothing about this. Does anybody know why SQLite 
design it so? SQLite is platform independent - i.e. it works on all systems and 
has to make do with what is available everywhere. F_SETLKW is not available on 
all platforms and can't be a standard way for SQLite to interface. You can 
however make your own VFS for SQLite that implements it on Unix systems, if you 
like. This is quite easy. Does F_SETLKW have a timeout? what must SQLite do if 
the file still doesn't become available after a long time? How would this be 
better than the current way? You probably know this already, but the 
lock-checking mechanism is quite efficient, and a locked file gets re-checked 
(if a timeout is specified) very quick, then successively longer and longer 
intervals until the timeout expires. I doubt you will see a great increase in 
lock-situation performance using the file-lock wait cycle - but if you do make 
that VFS, perhaps we could do some testing of the hypothesis. Cheers, Ryan 
_______________________________________________ sqlite-users mailing list 
sqlite-users at mailinglists.sqlite.org 
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to