この Web サイトhttp://www.cs.cornell.edu/courses/cs4410/2010fa/synchreview.pdfでは、複数の反復に対するバリアの実装は次の方法で実装する必要があると述べています。
class Barrier:
def __init__(self, N):
self.incount = 0
self.outcount = 0
self.N = N
self.lock = Lock()
self.everyoneatbarrier = Condition(self.lock)
def barrier(self, processid):
with self.lock:
self.incount += 1
if self.incount == self.N
self.everoneatbarrier.notifyAll()
while self.incount < self.N or
(self.incount >= self.N and self.outcount < self.N):
self.everyoneatbarrier.wait()
self.outcount += 1
if self.outcount == self.N:
self.outcount = 0
self.incount = self.N
次のような単純な if-else ステートメントを使用した方が簡単ではないでしょうか。
def barrier(self, processid):
with self.lock:
self.count += 1
if self.count == self.N :
self.everyoneatbarrier.notifyAll()
else :
self.everyoneatbarrier.wait()
self.count = 0
余分な努力のすべてを理解していません。みんな、ありがとう。