Semaphore 在内部管理着一个计数器。调用 acquire() 会使这个计数器 -1,release() 则是 +1.计数器的值永远不会小于 0,当计数器到 0 时,再调用 acquire() 就会阻塞,直到其他线程来调用 release()
import time
import threading
s1=threading.Semaphore(5) #添加一个计数器
def foo():
s1.acquire() #计数器获得锁
time.sleep(2) #程序休眠2秒
print("ok",time.ctime())
s1.release() #计数器释放锁
for i in range(20):
t1=threading.Thread(target=foo,args=()) #创建线程
t1.start() #启动线程
参考:
https://www.cnblogs.com/renpingsheng/p/7202818.html
https://my.oschina.net/lionets/blog/194577
本文深入探讨了Semaphore在Python中的应用,详细解释了其作为线程同步工具的工作原理。Semaphore通过内部计数器实现资源的限制和分配,当计数器为0时,额外的acquire调用将被阻塞,直至release调用释放资源。文章通过实例演示了如何使用Semaphore控制并发线程的数量。
371

被折叠的 条评论
为什么被折叠?



