From: Laurent Mazet Date: Mon, 20 Oct 2025 20:53:55 +0000 (+0200) Subject: wip X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=0200448e611a7c3246196ecbc11de1024d3d3b77;p=benchmarks.git wip --- diff --git a/mutex.c b/mutex.c index c399505..bef47f1 100644 --- a/mutex.c +++ b/mutex.c @@ -19,7 +19,6 @@ void (*usage_ext) (FILE *) = NULL; int (*parse_arg_ext) (char *) = NULL; pthread_barrier_t *barrier = NULL; -pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t test = PTHREAD_MUTEX_INITIALIZER; volatile int shared_flag = 0; ts_t ts1, ts2; @@ -33,23 +32,15 @@ void *ping (__attribute__((unused)) void *arg) { pthread_barrier_wait (barrier); - printf ("Sending ping...\n"); - pthread_mutex_lock (&test); - usleep (TIMER); - - for (int i = 0; i < nb_measurements; i++) { - - pthread_mutex_lock (&mutex); - pthread_mutex_unlock (&mutex); - - usleep (TIMER / 2); - - pthread_mutex_unlock (&test); - sys_timestamp (&ts1); - - usleep (TIMER/2); + while (try < nb_measurements) { pthread_mutex_lock (&test); + usleep (TIMER); + shared_flag = 1; + sys_timestamp (&ts1); + pthread_mutex_unlock (&test); + //shared_flag = 0; + usleep (TIMER); } pthread_exit (NULL); @@ -60,15 +51,19 @@ void *pong (__attribute__((unused)) void *arg) pthread_barrier_wait (barrier); - for (int i = 0; i < nb_measurements; i++) { - - pthread_mutex_lock (&mutex); - usleep (TIMER); - pthread_mutex_unlock (&mutex); - + while (try < nb_measurements) { + ts_t ts; + sys_timestamp (&ts); pthread_mutex_lock (&test); - sys_timestamp (&ts2); - deltas[i] = diff_timestamp (&ts2, &ts1); + 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; + } pthread_mutex_unlock (&test); } @@ -92,8 +87,6 @@ int init (dts_t *buffer, int nb, pthread_barrier_t *synchro) int finish () { - pthread_mutex_destroy (&test); - printf ("Too fast: %d\n", nbtoofast); return rc || nbtoofast; diff --git a/semaphore.c b/semaphore.c index bc80a8b..e78566b 100644 --- a/semaphore.c +++ b/semaphore.c @@ -23,7 +23,6 @@ void (*usage_ext) (FILE *) = NULL; int (*parse_arg_ext) (char *) = 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; @@ -37,20 +36,14 @@ void *ping (__attribute__((unused)) void *arg) { 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); - - usleep (TIMER / 2); + while (try < nb_measurements) { + sem_wait (&sem); + usleep (TIMER); + shared_flag = 1; sys_timestamp (&ts1); sem_post (&sem); - + //shared_flag = 0; usleep (TIMER); } @@ -61,17 +54,21 @@ void *pong (__attribute__((unused)) void *arg) { pthread_barrier_wait (barrier); - printf ("Receiving ping...\n"); - - for (int i = 0; i < nb_measurements; i++) { - - pthread_mutex_lock (&mutex); - usleep (TIMER); - pthread_mutex_unlock (&mutex); + while (try < nb_measurements) { + ts_t ts; + sys_timestamp (&ts); sem_wait (&sem); - sys_timestamp (&ts2); - deltas[i] = diff_timestamp (&ts2, &ts1); + 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); } pthread_exit (NULL);