上一篇文章:Python執行緒專題4:Timer物件、Lock物件、Rlock物件
下一篇文章:Python執行緒專題6:事件
訊號量與有邊界的訊號量
訊號量是一個基於計數器的同步原語,每次呼叫acquire()方法時,此計數器減1,每次呼叫release()方法時此計數器加1.。如果計數器為0,acquire()方法將會阻塞,直到有其他執行緒呼叫release()方法為止。
訊號量
語法:
s=Semqphore(value)
建立一個新的訊號量。value是計數器的初始值。如果省略value,將預設設定為1
常用方法:
s.acquire(blocking):獲取訊號量。如果內部計數器大於0,此方法將把它的值減1。
然後立即返回。如果它的值為0,此方法將阻塞,直到另一個執行緒呼叫release()方法為止。
blocking引數的行為與Lock和RLock物件中描述的相同。
s.release():通過將內部計數器的值加1來釋放一個訊號量。
如果計數器為0,而且另一個執行緒正在等待,該執行緒講被喚醒。
如果有多個執行緒正在等待,只能從它的acquire()的呼叫中返回一個,並且順序不確定。
有邊界的訊號量
語法:
bs=BoundedSemaphore(value)
建立一個新的有邊界訊號量。value是計數器的初始值,如果忽略,將預設為1.
訊號量與有邊界的訊號量的區別
BoundedSemaphore的工作方式與Semaphore完全相同,但release()操作的次數不能超過acquire()的操作次數。
訊號量與互斥鎖的微妙差別
訊號量可用於傳送訊號。例如,可以從不同執行緒呼叫acquire()和release()方法,以便在生產者和消費者執行緒之間進行通訊。