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()方法,以便在生产者和消费者线程之间进行通讯。
相关文章
相关标签/搜索