diff options
Diffstat (limited to 'tests/benchtest1.c')
-rw-r--r-- | tests/benchtest1.c | 116 |
1 files changed, 87 insertions, 29 deletions
diff --git a/tests/benchtest1.c b/tests/benchtest1.c index 883c24f..8514fa4 100644 --- a/tests/benchtest1.c +++ b/tests/benchtest1.c @@ -14,6 +14,9 @@ #include <stdlib.h> #endif +#include "benchtest.h" + +#define PTW32_MUTEX_TYPES #define ITERATIONS 10000000L pthread_mutex_t mx; @@ -40,24 +43,22 @@ long overHeadMilliSecs = 0; void runTest (char * testNameString, int mType) { -#ifdef PTHREAD_MUTEX_DEFAULT - pthread_mutexattr_settype(&ma, mType); +#ifdef PTW32_MUTEX_TYPES + assert(pthread_mutexattr_settype(&ma, mType) == 0); #endif - pthread_mutex_init(&mx, &ma); + assert(pthread_mutex_init(&mx, &ma) == 0); TESTSTART - (void) pthread_mutex_lock(&mx); - (void) pthread_mutex_unlock(&mx); + assert(pthread_mutex_lock(&mx) == 0); + assert(pthread_mutex_unlock(&mx) == 0); TESTSTOP - pthread_mutex_destroy(&mx); + assert(pthread_mutex_destroy(&mx) == 0); - durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop) - - overHeadMilliSecs; + durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop) - overHeadMilliSecs; - printf( "%-25s %15ld %15ld %15.3f\n", - testNameString, - ITERATIONS, + printf( "%-40s %15ld %15.3f\n", + testNameString, durationMilliSecs, (float) durationMilliSecs * 1E3 / ITERATIONS); } @@ -66,47 +67,104 @@ runTest (char * testNameString, int mType) int main (int argc, char *argv[]) { + CRITICAL_SECTION cs; + old_mutex_t ox; + pthread_mutexattr_init(&ma); - printf( "Single thread, non-blocking mutex locks/unlocks.\n\n"); - printf( "%-25s %15s %15s %15s\n", - "Test", - "Iterations", - "Total(msec)", - "lock/unlock(usec)"); + printf( "========================================================================\n"); + printf( "\nNon-blocking mutex lock plus unlock.\n%ld iterations\n\n", + ITERATIONS); + printf( "%-40s %15s %15s\n", + "Test", + "Total(msec)", + "average(usec)"); + printf( "------------------------------------------------------------------------\n"); /* * Time the loop overhead so we can subtract it from the actual test times. */ TESTSTART + assert(1 == 1); + assert(1 == 1); TESTSTOP - durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop) - - overHeadMilliSecs; + durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop) - overHeadMilliSecs; + overHeadMilliSecs = durationMilliSecs; - printf( "%-25s %15ld %15ld\n", - "Overhead", - ITERATIONS, - durationMilliSecs); - overHeadMilliSecs = durationMilliSecs; + InitializeCriticalSection(&cs); + + TESTSTART + assert((EnterCriticalSection(&cs), 1) == 1); + assert((LeaveCriticalSection(&cs), 1) == 1); + TESTSTOP + + DeleteCriticalSection(&cs); + + durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop) - overHeadMilliSecs; + + printf( "%-40s %15ld %15.3f\n", + "Simple Critical Section", + durationMilliSecs, + (float) durationMilliSecs * 1E3 / ITERATIONS); + + + old_mutex_use = OLD_WIN32CS; + assert(old_mutex_init(&ox, NULL) == 0); + + TESTSTART + assert(old_mutex_lock(&ox) == 0); + assert(old_mutex_unlock(&ox) == 0); + TESTSTOP + + assert(old_mutex_destroy(&ox) == 0); + + durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop) - overHeadMilliSecs; + + printf( "%-40s %15ld %15.3f\n", + "PT Mutex using a Critical Section (WNT)", + durationMilliSecs, + (float) durationMilliSecs * 1E3 / ITERATIONS); + + + old_mutex_use = OLD_WIN32MUTEX; + assert(old_mutex_init(&ox, NULL) == 0); + + TESTSTART + assert(old_mutex_lock(&ox) == 0); + assert(old_mutex_unlock(&ox) == 0); + TESTSTOP + + assert(old_mutex_destroy(&ox) == 0); + + durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop) - overHeadMilliSecs; + + printf( "%-40s %15ld %15.3f\n", + "PT Mutex using a Win32 Mutex (W9x)", + durationMilliSecs, + (float) durationMilliSecs * 1E3 / ITERATIONS); + + printf( "........................................................................\n"); /* * Now we can start the actual tests */ -#ifdef PTHREAD_MUTEX_DEFAULT - runTest("PTHREAD_MUTEX_DEFAULT", PTHREAD_MUTEX_DEFAULT); +#ifdef PTW32_MUTEX_TYPES + runTest("PTHREAD_MUTEX_DEFAULT (W9x,WNT)", PTHREAD_MUTEX_DEFAULT); - runTest("PTHREAD_MUTEX_NORMAL", PTHREAD_MUTEX_NORMAL); + runTest("PTHREAD_MUTEX_NORMAL (W9x,WNT)", PTHREAD_MUTEX_NORMAL); - runTest("PTHREAD_MUTEX_ERRORCHECK", PTHREAD_MUTEX_ERRORCHECK); + runTest("PTHREAD_MUTEX_ERRORCHECK (W9x,WNT)", PTHREAD_MUTEX_ERRORCHECK); - runTest("PTHREAD_MUTEX_RECURSIVE", PTHREAD_MUTEX_RECURSIVE); + runTest("PTHREAD_MUTEX_RECURSIVE (W9x,WNT)", PTHREAD_MUTEX_RECURSIVE); #else runTest("Non-blocking lock", 0); #endif + printf( "========================================================================\n"); + /* * End of tests. */ |