wip
authorLaurent Mazet <mazet@softndesign.org>
Mon, 20 Oct 2025 20:53:55 +0000 (22:53 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Mon, 20 Oct 2025 20:53:55 +0000 (22:53 +0200)
mutex.c
semaphore.c

diff --git a/mutex.c b/mutex.c
index c399505c413a877c16335dedad277a475a69653f..bef47f1a838f8e8fabe6cf24cdb85f8233fc0260 100644 (file)
--- 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;
index bc80a8baccc09640a104daa2ee91bb957838c642..e78566b984f0f87e7dc998277c0c8d2960f4aad4 100644 (file)
@@ -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);