A Simple Centralized Barrier
struct bar_type {int counter; struct lock_type lock; int flag = 0;} bar_name;
if (bar_name.counter == 0)
bar_name.flag = 0; /* reset flag if first to reach*/
mycount = bar_name.counter++; /* mycount is private */
if (mycount == p) { /* last to arrive */
bar_name.counter = 0; /* reset for next barrier */
bar_name.flag = 1; /* release waiters */
else while (bar_name.flag == 0) {}; /* busy wait for release */
Shared counter maintains number of processes that have arrived
- increment when arrive (lock), check until reaches numprocs
- Problem?