+ if (mutex == NULL) { // first arriving on the barrier
+ mutex = SIMIX_mutex_init();
+ cond = SIMIX_cond_init();
+ processes_arrived_sofar=0;
+ }
+ DEBUG2("Entering barrier: %s (%d already there)", name,processes_arrived_sofar);
+
+ SIMIX_mutex_lock(mutex);
+ if (++processes_arrived_sofar == communicator_size) {
+ SIMIX_cond_broadcast(cond);
+ SIMIX_mutex_unlock(mutex);
+ } else {
+ SIMIX_cond_wait(cond,mutex);
+ SIMIX_mutex_unlock(mutex);
+ }
+
+ DEBUG1("Exiting barrier: %s", name);