안녕하세요. 동기화쪽을 공부중인데, barrier에서 왜 이렇게 하는지
영 감이 안와서 질문드립니다.
보통, barrier 알고리즘은
struct bar_type {int counter;
struct lock_type lock;
int flag = 0;}
bar_name;
BARRIER (bar_name, p) {
LOCK(bar_name.lock);
if (bar_name.counter == 0)
bar_name.flag = 0;
mycount = bar_name.counter++;
UNLOCK(bar_name.lock);
if (mycount == p-1) {
bar_name.counter = 0;
bar_name.flag = 1;
}
else while (bar_name.flag == 0) {};
}
이렇게 쓰지만, 이 경우 barrier를 연속으로 두개 쓸경우에, 플래