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