From: Laurent Mazet Date: Wed, 15 Oct 2025 21:03:11 +0000 (+0200) Subject: change initial mutex into barrier X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=d98a891a0904041467421483fcaf1b7d88f5ad36;p=benchmarks.git change initial mutex into barrier --- diff --git a/mutex.c b/mutex.c index d9aa277..a73e63a 100644 --- a/mutex.c +++ b/mutex.c @@ -18,7 +18,7 @@ char *message = "Mutex latency"; void (*usage_ext) (FILE *) = NULL; int (*parse_arg_ext) (char *) = NULL; -pthread_mutex_t *mutex = NULL; +pthread_barrier_t *barrier = NULL; pthread_mutex_t test = PTHREAD_MUTEX_INITIALIZER; volatile int shared_flag = 0; ts_t ts1, ts2; @@ -31,7 +31,7 @@ int rc = 0; void *ping (__attribute__((unused)) void *arg) { - pthread_mutex_unlock (mutex); + pthread_barrier_wait (barrier); while (try < nb_measurements) { pthread_mutex_lock (&test); @@ -49,7 +49,7 @@ void *ping (__attribute__((unused)) void *arg) void *pong (__attribute__((unused)) void *arg) { - pthread_mutex_unlock (mutex); + pthread_barrier_wait (barrier); while (try < nb_measurements) { ts_t ts; @@ -70,14 +70,14 @@ void *pong (__attribute__((unused)) void *arg) pthread_exit (NULL); } -int init (dts_t *buffer, int nb, pthread_mutex_t *synchro) +int init (dts_t *buffer, int nb, pthread_barrier_t *synchro) { /* set global variables */ deltas = buffer; nb_measurements = nb; - mutex = synchro; + barrier = synchro; shared_flag = 1; diff --git a/semaphore.c b/semaphore.c index 05885a3..223937d 100644 --- a/semaphore.c +++ b/semaphore.c @@ -22,7 +22,8 @@ char *message = "Semaphore latency"; void (*usage_ext) (FILE *) = NULL; int (*parse_arg_ext) (char *) = NULL; -pthread_mutex_t *mutex = NULL; +pthread_barrier_t *barrier = NULL; +pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; volatile int shared_flag = 0; ts_t ts1, ts2; sem_t sem; @@ -35,15 +36,19 @@ int rc = 0; void *ping (__attribute__((unused)) void *arg) { - pthread_mutex_unlock (mutex); + pthread_barrier_wait (barrier); + printf ("Sending ping...\n"); + + usleep (TIMER); + + for (int i = 0; i < nb_measurements; i++) { + + pthread_mutex_lock (&mutex); + pthread_mutex_unlock (&mutex); - while (try < nb_measurements) { - sem_wait (&sem); - usleep (TIMER); - shared_flag = 1; sys_timestamp (&ts1); sem_post (&sem); - //shared_flag = 0; + usleep (TIMER); } @@ -53,35 +58,31 @@ void *ping (__attribute__((unused)) void *arg) void *pong (__attribute__((unused)) void *arg) { - pthread_mutex_unlock (mutex); + pthread_barrier_wait (barrier); + printf ("Receiving ping...\n"); + + for (int i = 0; i < nb_measurements; i++) { - while (try < nb_measurements) { - ts_t ts; - sys_timestamp (&ts); sem_wait (&sem); - if (shared_flag) { - sys_timestamp (&ts2); - if (diff_timestamp (&ts2, &ts) < (9 * TIMER / 10)) { - nbtoofast++; - } else { - deltas[try++] = diff_timestamp (&ts2, &ts1); - } - shared_flag = 0; - } - sem_post (&sem); + sys_timestamp (&ts2); + deltas[i] = diff_timestamp (&ts2, &ts1); + + pthread_mutex_lock (&mutex); + usleep (TIMER); + pthread_mutex_unlock (&mutex); } pthread_exit (NULL); } -int init (dts_t *buffer, int nb, pthread_mutex_t *synchro) +int init (dts_t *buffer, int nb, pthread_barrier_t *synchro) { /* set global variables */ deltas = buffer; nb_measurements = nb; - mutex = synchro; + barrier = synchro; /* semaphore test */