相關(guān)模塊:thread澡谭、threading
thread 模塊
thread 文檔:https://docs.python.org/2/library/thread.html
This module provides low-level primitives for working with multiple threads. The threading module provides an easier to use and higher-level threading API built on top of this module.
主要方法:
thread.allocate_lock() # 獲取一個(gè)互斥鎖
thread.get_ident() # 獲取線程 id
thread.lock 互斥鎖對(duì)象
實(shí)現(xiàn)了互斥鎖原語
方法列表:
lock.acquire([waitflag]) # waitflag 為 0 時(shí)争涌,語義為 try_lock;非 0 時(shí)音五,為 lock
lock.release()
lock.locked()
threading 模塊
RLock 可重入(reentrant)鎖對(duì)象
語義:通過引用計(jì)數(shù)(__count)和線程 id (__owner)標(biāo)志惫撰,使得同一線程可以重入
支持操作:
acquire()
release()
條件變量輔助操作:
_acquire_restore
_release_save
Condition 條件變量
說明:可以底層可以使用互斥鎖(thread.lock)或者可重入鎖(RLock),主要方法:
wait
notify
notifyAll
實(shí)現(xiàn):不是對(duì)于系統(tǒng)條件變量的簡(jiǎn)單封裝躺涝,而是自己通過鎖機(jī)制實(shí)現(xiàn)重新實(shí)現(xiàn)的條件變量的語義厨钻。每當(dāng)有一個(gè)線程 wait 的時(shí)候,先拿到共享鎖坚嗜,再為此線程分配一個(gè)互斥鎖(thread.lock)夯膀,讓線程等待在此鎖上,并將此鎖加入等待隊(duì)列 __waiters苍蔬,notify 則是從等待隊(duì)列 __waiters 中取出任意一個(gè)互斥鎖釋放掉诱建。代價(jià)是每個(gè)線程都會(huì)開一個(gè)互斥鎖。
Semaphore 信號(hào)量
說明:和互斥量類似碟绑,只不過是一次可以由多個(gè)使用者拿到鎖俺猿。
實(shí)現(xiàn):通過條件變量 Condition 和計(jì)數(shù)實(shí)現(xiàn)。
Event 事件
封裝條件變量的通知機(jī)制
Timer
通過條件變量實(shí)現(xiàn)的定時(shí)器