線程同步的方式 (保證線程安全)
- 互斥量(鎖): 通過互斥機制防止多個線程同時訪問公共資源
- 信號量(semaphore): 控制同一時刻多個線程訪問同一個資源的線程數
- 事件(signal): 通過通知的方式保持多個線程同步
事件(信號)
Event是最簡單的線程間通信機制,一個線程負責給事件發信號,其他線程等待事件。
Event類內部有一個flag標識,初始值爲False。
Event類常用的三個方法有:set、clear、wait。set方法會將flag標識置爲True,
所有處於等待的線程將會被喚醒;clear方法會將flag重置爲False,wait方法將阻塞線程,除非flag標識被置爲True。
import threading
import time
ev=threading.Event()
def func():
print('%s waits event...' % threading.currentThread().getName())
ev.wait()
print('%s receives event...' % threading.currentThread().getName())
if __name__ == '__main__':
t1=threading.Thread(target=func,args=())
t2=threading.Thread(target=func,args=())
t1.start()
t2.start()
time.sleep(5) #主線程休眠5秒
print('main thread sets event...')
ev.set() #主線程設置事件
result:
Thread-1 waits event...
Thread-2 waits event...
main thread sets event...
Thread-1 receives event...
Thread-2 receives event...