change initial mutex into barrier
authorLaurent Mazet <mazet@softndesign.org>
Wed, 15 Oct 2025 21:03:11 +0000 (23:03 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Wed, 15 Oct 2025 21:03:11 +0000 (23:03 +0200)
mutex.c
semaphore.c

diff --git a/mutex.c b/mutex.c
index d9aa277f5be350be09cb1dfb3b9228818123ccd7..a73e63a9e3b232e96dee8e32e564ee43eccebb58 100644 (file)
--- 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;
 
index 05885a35d0b5798490d4bd6140858eb880de8bf4..223937d694b282fd0e0415232cafc5bf14b3d712 100644 (file)
@@ -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 */