'''
Created on 2017-1-11
@author: admin
'''
from threading import Condition, Thread
class CyclicBarriar():
def __init__(self,job,count):
self.condition=Condition()
self.job=job;
self.count=count
def await(self):
self._doAwait()
def _doAwait(self):
try:
self.condition.acquire()
self.count-=1
if self.count==0:
if self.job!=None:
self.job.run()
self.condition.notifyAll()
else:
self.condition.wait()
finally:
self.condition.release()
if __name__ == '__main__':
class SubThread(Thread):
def __init__(self,name,barriar):
Thread.__init__(self)
self.name=name;
self.barriar=barriar
def run(self):
print("finishing %s"%self.name)
self.barriar.await()
class MainThread(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
print("finishing main thread")
barrair=CyclicBarriar(MainThread(),3)
thread1=SubThread("thread one",barrair)
thread2=SubThread("thread second",barrair)
thread3=SubThread("thread third",barrair)
thread1.start()
thread2.start()
thread3.start()