#1、信号量,用来保证多个线程不会互相冲突。

#2、迷你唱吧:每次只能有两人在里面唱k:
from threading import Thread
from threading import Semaphore
import time
import random
def sing(i,sem):
sem.acquire()
print('%s拿到钥匙进入房间唱K'%i)
time.sleep(random.randint(3,6)) #睡眠是为了看效果
print('%s从房间出来了'%i)
sem.release() sem = Semaphore(2) #有两把钥匙,受到钥匙的限制,5个线程不能同时执行,同一时间只能有2个线程在执行,其他在等着。
for i in range(5): #5人唱k,5个任务,开启5个线程。
t = Thread(target=sing,args=(i,sem))
t.start()
# 0拿到钥匙进入房间唱K
# 1拿到钥匙进入房间唱K
# 1从房间出来了
# 2拿到钥匙进入房间唱K
# 0从房间出来了
# 3拿到钥匙进入房间唱K
# 3从房间出来了
# 4拿到钥匙进入房间唱K
# 2从房间出来了
# 4从房间出来了 #3、信号量和线程池的区别:
# 1.信号量:有几个任务就开几个线程,因为受到锁的限制,线程(任务)不能同时执行。
# 例如有两把锁执行5个线程(任务),每次只能有两个线程(任务)在执行,其他在等待。
# 线程池:可以设置线程的数量去轮流执行它的任务:例如设置2个线程去轮流执行5个任务。
# 每次只能有两个任务在执行,其他在等待。

最新文章

  1. 【MSSQL】MSSQL还原单mdf文件报1813错误
  2. serialize()序列化
  3. Zend Studio实用快捷键一览表
  4. java-资源管理器try-with-resource
  5. appium for windows 环境搭建
  6. mvc简单execl导出
  7. 【Spark学习】Apache Spark调优
  8. web前端安全相关
  9. [HDU] 2063 过山车(二分图最大匹配)
  10. Genymotion如何访问本地服务器?
  11. keytool 错误:java.to.FileNotFoundException:
  12. visual studio 2015使用python tools远程调试maya 2016
  13. Executor框架简介
  14. BZOJ 4644
  15. Timeout occurred while waiting for latch: class 'ACCESS_METHODS_DATASET_PARENT'
  16. FreeMaker使用HashMap
  17. indexOf includes 区别
  18. stock 基本操作
  19. day06 元组类型
  20. bootstrap4.1下拉菜单

热门文章

  1. 从 relu 的多种实现来看 torch.nn 与 torch.nn.functional 的区别与联系
  2. VMware CentOS 设置IP地址
  3. maxima安装&使用
  4. 吴裕雄--天生自然 PHP开发学习:数组排序
  5. JS基础——脚本位置、数据类型、函数作用域
  6. 开始新建AEM站点-周末教程
  7. Mybatis实现联合查询(六)
  8. Linux(CENTOS7) Nginx安装
  9. UML-迭代1-基础
  10. java时区问题设置,new Date()和系统时间相差8个小时