Python線程專題5:信號量與有邊界的信號量

上一篇文章: 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()方法,以便在生產者和消費者線程之間進行通訊。
相關文章
相關標籤/搜索