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;
{
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);
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);
}
int finish ()
{
- pthread_mutex_destroy (&test);
-
printf ("Too fast: %d\n", nbtoofast);
return rc || nbtoofast;
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;
{
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);
}
{
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);