_______ .__ .__ .__ .__ \ \ ____ __ __ _______ |__|| | | | |__| ____ ____ / | \ _/ __ \ | | \\_ __ \| || | | | | | / _ \ / \ / | \\ ___/ | | / | | \/| || |__| |__| |( <_> )| | \ \____|__ / \___ >|____/ |__| |__||____/|____/|__| \____/ |___| / =========\/======\/=================================================\/== v0.01 04/JUL/2007 (C) Copyright 2007-2007 Scott D. Yelich SOME RIGHTS RESERVED .,-*~'`^`'~*-,._.,-*~'`^`'~*-,._.,-*~'`^`'~*-,._.-*~'`^`'~*-,._.,-*~'`^`'~*-,. The software is released under Creative Commons - Attribution 3.0 unported see: http://creativecommons.org/licenses/by/3.0/legalcode You can grab the Makefile to see how I compile the programs with SuSE and GCC 4.x. Basically, each program is compiled and linked against sqlite3 with -lsqlite3, etc. Compile the programs -- then run concurrency to create the database. Once the database has been created, the lock program can be run either without a command line parameter so that it uses the default setting or with a command line parameter that represents how many times a second to lock and unlock the database. For instance "lock 1" sets the maximum of 1/2 a second locked, 1/2 a second unlocked. It's possible to run more than one lock program at the same time -- and the lock program will display how many attempts it took before it obtained a lock. For instance, run "lock 1" for maximum lock time and "lock 30" for 15 locks and 15 unlocks a second. All of these lock times are much greater than the amount of lock time used by sql and are therefore good for testing concurrency. The Xql3 program uses a simple usleep time between tries -- it doesn't do anything fancy like try more often after more counts, etc. Also, the retry count is not even a parameter -- it's hard coded at 200. Perhaps later versions will allow these values to be set/configured/passed, if there is a need. Enjoy! Scott