1e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project/* a small program to benchmark locking primitives with different implementations */ 2e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 3e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <pthread.h> 4e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <sys/time.h> 5e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <stdio.h> 6e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 7e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectstatic double now(void) 8e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project{ 9e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project struct timeval tv; 10e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project gettimeofday(&tv, NULL); 11e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project return tv.tv_sec + tv.tv_usec/1000000.0; 12e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project} 13e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 14e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectint main( void ) 15e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project{ 16e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project double t0, t1; 17e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project pthread_mutex_t lock1 = PTHREAD_MUTEX_INITIALIZER; 18e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project int volatile lock2 = 0; 19e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project long count; 20e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project const long ITERATIONS = 1000000; 21e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 22e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project /* pthread_mutex_lock */ 23e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project t0 = now(); 24e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project for (count = ITERATIONS; count > 0; count--) { 25e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project pthread_mutex_lock(&lock1); 26e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project pthread_mutex_unlock(&lock1); 27e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 28e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project t1 = now() - t0; 29e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project printf( "pthread_mutex_lock/unlock: %.5g us/op\n", (t1*1000000.0)/ITERATIONS ); 30e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 31e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project return 0; 32e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project} 33