您的位置:首页 > 编程语言 > Python开发

python使用condition实现一个简易的栅栏,CyclicBarriar

2017-01-11 14:42 507 查看
'''
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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: