以多线程为例写个互斥锁

from threading import Thread ,Lock
import time
mutex = Lock() n = 100 def task():
global n
with mutex:
temp = n
time.sleep(0.1)
n= temp-1 if __name__ == '__main__':
t_l = []
start_time = time.time()
for i in range(100):
t = Thread(target=task)
t_l.append(t)
t.start() for t in t_l:
t.join()
stop_time = time.time()
print(n)
print(stop_time-start_time) 1.GIL(这里是Cpython解释器独有的):本质就是互斥锁,程序中修改共享数据就应该用互斥锁来解决。
互斥锁是阻止多个任务同时运行,同一进程下的多个线程只能运行一个。
都是阻止多个并发线程同一时间只能有一个运行。
即:有了GIL的存在,同一进程内的多个线程同一时刻只能有一个运行,意味着Cpython解释器在一个进程下的多个线程无法实现并行,,意味着无法利用多核优势
但不影响并发的实现 2.为何要有GIL?
因为python解释器自带垃圾回收机制不是线程安全的
GIL可以被比喻成执行权限,同一线程下的所有线程都想要执行,都需要先抢执行权限 如何用?
GIL相当于执行权限,会在任务无法执行的情况下,就强行释放

最新文章

  1. 原生js事件的添加和删除
  2. NOIP 2008提高组第三题题解by rLq
  3. HDU5737 : Differencia
  4. Symantec更新服务器
  5. 20145317彭垚 《Java程序设计》第7周学习总结
  6. HDU 5800 (DP)
  7. Android HTTPS(5)SSL测试工具
  8. WEBUS2.0 In Action - 搜索操作指南 - (1)
  9. Vim的tag系统
  10. XBox360自制系统的更新(Update)
  11. DataTable.AcceptChanges方法有何用处
  12. cocos2d-x 精灵的创建和基本使用
  13. TimesTen更改CacheGroup管理用户ORACLE结束和TT结束password【TimesTen操作和维修基地】
  14. D3.js从入门到“放弃”指南
  15. python学习:函数的递归调用
  16. xml 转换成对象(采用反射机制对对对象属性赋值)
  17. 2017-2018-2 20165237 实验三《 敏捷开发与XP实践》实验报告
  18. Hadoop3集群搭建之——hbase安装及简单操作
  19. 【webdriver自动化】使用unittest实现自动登录163邮箱然后新建一个联系人
  20. Jq_input file标签上传图片到服务器

热门文章

  1. Qt 编程指南10 QImage Mat QPixmap转换
  2. Qt 编程指南 4 单行编辑控件
  3. linux 的常用命令---------第十一阶段
  4. 2017-2018-2 20155314《网络对抗技术》Exp3 免杀原理与实践
  5. ethereum/EIPs-55 Mixed-case checksum address encoding
  6. Oracle 11g中的snapshot standby特性
  7. E325: ATTENTION
  8. 【Codeforces 111C】Petya and Spiders
  9. jquery $.each()遍历json数组
  10. TensorFlow框架下的RNN实践小结