博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 互斥锁
阅读量:4583 次
发布时间:2019-06-09

本文共 788 字,大约阅读时间需要 2 分钟。

  • 互斥锁Mutex的使用
多个线程处理共享数据,数据会出现问题:
  2.7之前每100指令切换一次GIL锁,线程就会sleep,线程
会把前100条
处理指令存放在CPU缓存内,切换GIL锁后放入另
外一个线程再次处理同一
条共享数据,如果我这条共享数据需要
101条指令才能处理完,那么这块数
据结果就会出现问题,当所
有执行线程轮一边后在回来,CPU会取出第一
缓存区的数据,
执行第一条数据的101条指令,结果会覆盖掉共享数据,
所以的
出的结果并不是我们想得到的。
 
决上述问题,我们就要使用“互斥锁”:
  互斥锁:保证锁定同一个线程,修改这个完整的数据,是用户
程序自己
的锁。
  使用情况:因为使用时暂用时间,影响其他线程等待,所以尽量
修改处
理块的数据后立即释放锁。
 
互斥锁模拟
import threading,timedef run(n):    # 获取一把锁    lock.acquire() # 设置全局变量    global num    num += 1    # 释放一把锁    lock.release()# 互斥锁实例化lock = threading.Lock()num = 0# 循环50次for i in range(50):    # 生成一个线程实例target=目标,args=参数    t = threading.Thread(target=run,args=("t-%s"%i,))# 启动线程 调用runt.start()# 执行结果添加到列表t_objs.append(t)print("num",num)
注意:只能在python2版本生效,python3,自动加锁,Ubuntu内可以测试成功。

转载于:https://www.cnblogs.com/xiangsikai/p/8178791.html

你可能感兴趣的文章
SQL Server 语法大全
查看>>
MySQL存储过程
查看>>
HttpContext是干什么的
查看>>
线程安全
查看>>
原形模式
查看>>
iOS开发笔记5:多线程之NSThread、NSOperation及GCD
查看>>
php中curl的详细解说【转】
查看>>
Codeforces Round #281 (Div. 2) C. Vasya and Basketball 二分
查看>>
hdu 6069 Counting Divisors 筛法
查看>>
codeforces gym 100971 K Palindromization 思路
查看>>
各个控件说明
查看>>
鼠标事件(jQuery)
查看>>
delete指针时coredump的分析之旅
查看>>
openoffice+pdf2swf+FlexPaper在线显示office和pdf
查看>>
24-React Components组件
查看>>
[BZOJ 1188] [HNOI2007] 分裂游戏 【博弈论|SG函数】
查看>>
[BZOJ - 2631] tree 【LCT】
查看>>
ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程...
查看>>
JS实现数组排序:升序和降序
查看>>
怎样写具体设计文档
查看>>