同步對象與信號量

同步對象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()




發佈了51 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章