/* a small program to benchmark locking primitives with different implementations */

#include <pthread.h>
#include <sys/time.h>
#include <stdio.h>

static double  now(void)
{
    struct timeval   tv;
    gettimeofday(&tv, NULL);
    return tv.tv_sec + tv.tv_usec/1000000.0;
}

int  main( void )
{
    double             t0, t1;
    pthread_mutex_t    lock1 = PTHREAD_MUTEX_INITIALIZER;
    int volatile       lock2 = 0;
    long               count;
    const long         ITERATIONS = 1000000;

    /* pthread_mutex_lock */
    t0 = now();
    for (count = ITERATIONS; count > 0; count--) {
        pthread_mutex_lock(&lock1);
        pthread_mutex_unlock(&lock1);
    }
    t1 = now() - t0;
    printf( "pthread_mutex_lock/unlock:  %.5g us/op\n", (t1*1000000.0)/ITERATIONS );

    return 0;
}