------------ Benchmarking ------------ There is a set a benchmarking programs in the "tests" directory. These should be runnable using the following command-lines corresponding to each of the possible library builds: MSVC: nmake clean VC-bench nmake clean VCE-bench nmake clean VSE-bench Mingw32: make clean GC-bench make clean GCE-bench UWIN: The benchtests are run as part of the testsuite. Mutex benchtests ---------------- benchtest1 - Lock plus unlock on an unlocked mutex. benchtest2 - Lock plus unlock on a locked mutex. benchtest3 - Trylock on a locked mutex. benchtest4 - Trylock plus unlock on an unlocked mutex. Each test times up to three alternate synchronisation implementations as a reference, and then times each of the four mutex types provided by the library. Each is described below: Simple Critical Section - uses a simple Win32 critical section. There is no additional overhead for this case as there is in the remaining cases. POSIX mutex implemented using a Critical Section - The old implementation which uses runtime adaptation depending on the Windows variant being run on. When the pthreads DLL was run on WinNT or higher then POSIX mutexes would use Win32 Critical Sections. POSIX mutex implemented using a Win32 Mutex - The old implementation which uses runtime adaptation depending on the Windows variant being run on. When the pthreads DLL was run on Win9x then POSIX mutexes would use Win32 Mutexes (because TryEnterCriticalSection is not implemented on Win9x). PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL PTHREAD_MUTEX_ERRORCHECK PTHREAD_MUTEX_RECURSIVE - The current implementation supports these mutex types. The underlying basis of POSIX mutexes is now the same irrespective of the Windows variant, and should therefore have consistent performance. Semaphore benchtests -------------------- benchtest5 - Timing for various uncontended cases. In all benchtests, the operation is repeated a large number of times and an average is calculated. Loop overhead is measured and subtracted from all test times.