- if (SIMIX_sem_get_capacity(barrier_semaphore) == -communicator_size + 1) { // last arriving
- SIMIX_sem_release_forever(barrier_semaphore);
- SIMIX_sem_destroy(barrier_semaphore);
- barrier_semaphore = NULL;
- } else { // not last
- SIMIX_sem_acquire(barrier_semaphore);
+ 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);