同步对象与信号量

同步对象Event

import threading
import time
class Boss(threading.Thread):
    def run(self):
        print('Boss:加班到<22:00>')
        print(event.isSet())#isSet判断event是否已经set
        event.set()        #对event进行set
        time.sleep(5)
        print('Boss:<22:00>可以下班了')
        event.set()
        print(event.isSet())

class Worker(threading.Thread):
    def run(self):
        event.wait()     #wait方法:如果wait前没有对event进行set,则wait会阻塞,若已经set过则会继续运行下面的程序
        print('Worker:命苦啊!!!')
        time.sleep(1)
        event.clear()    #对event的状态进行清除,使event变为未set状态
        event.wait()
        print('Worker:Oh yeah!!!')



if __name__ == '__main__':
    event=threading.Event() #同步对象
    l=[]
    for i in range(5):
        l.append(Worker())

    l.append(Boss())
    for t in l:
        t.start()
    for t in l:
        t.join()

print('ending...')


'''
Boss:加班到<22:00>
False
Worker:命苦啊!!!
Worker:命苦啊!!!
Worker:命苦啊!!!
Worker:命苦啊!!!
Worker:命苦啊!!!
Boss:<22:00>可以下班了
True
Worker:Oh yeah!!!
Worker:Oh yeah!!!
Worker:Oh yeah!!!
Worker:Oh yeah!!!
Worker:Oh yeah!!!
ending...
'''

信号量Semaphore

import threading
import time
class Mythread(threading.Thread):
    def run(self):
        if semaphore.acquire():
              print(self.name)
              time.sleep(2)
              semaphore.release()

if __name__ == '__main__':
    #信号量用来控制线程的并发数,acquire时计数器-1,release时计数器+1,计数器为0时,acquire将阻塞
    semaphore=threading.Semaphore(5)
    for i in range(100):
        t=Mythread()
        t.start()




猜你喜欢

转载自blog.csdn.net/henry_lv/article/details/80011482