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;
void *ping (__attribute__((unused)) void *arg)
{
- pthread_mutex_unlock (mutex);
+ pthread_barrier_wait (barrier);
while (try < nb_measurements) {
pthread_mutex_lock (&test);
void *pong (__attribute__((unused)) void *arg)
{
- pthread_mutex_unlock (mutex);
+ pthread_barrier_wait (barrier);
while (try < nb_measurements) {
ts_t ts;
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;
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;
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);
}
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 */