/* * A mutex microbenchmark. * * $ gcc -fPIC -Wall -O -c donothing.c * $ gcc -shared donothing.o -o donothing.so * $ gcc -Wall -O -c mutex_bench.c * $ gcc mutex_bench.o donothing.o -o mutex_bench * * $Id$ */ #define NUM_ITERATIONS 100000000 #include #include #include #include void donothing(); double gettime() { struct rusage ru; getrusage(RUSAGE_SELF, &ru); return ru.ru_utime.tv_sec + ru.ru_stime.tv_sec + (double) ru.ru_utime.tv_usec/1e6 + (double) ru.ru_stime.tv_usec/1e6; } int main(void) { double before, between, after; unsigned long i; pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER; before = gettime(); for (i = 0; i < NUM_ITERATIONS; i++) { pthread_mutex_lock(&m); pthread_mutex_unlock(&m); } between = gettime(); for (i = 0; i < NUM_ITERATIONS; i++) { donothing(); donothing(); } after = gettime(); printf("Mutex locking/unlocking took %g seconds\n", between - before); printf("Empty function calls took %g seconds\n", after - between); return 0; }