Python 互斥锁


  • 互斥锁Mutex的使用
多个线程处理共享数据,数据会出现问题:
  2.7之前每100指令切换一次GIL锁,线程就会sleep,线程 会把前100条 处理指令存放在CPU缓存内,切换GIL锁后放入另 外一个线程再次处理同一 条共享数据,如果我这条共享数据需要 101条指令才能处理完,那么这块数 据结果就会出现问题,当所 有执行线程轮一边后在回来,CPU会取出第一 缓存区的数据, 执行第一条数据的101条指令,结果会覆盖掉共享数据, 所以的 出的结果并不是我们想得到的。
 
决上述问题,我们就要使用“互斥锁”:
  互斥锁:保证锁定同一个线程,修改这个完整的数据,是用户 程序自己 的锁。
  使用情况:因为使用时暂用时间,影响其他线程等待,所以尽量 修改处 理块的数据后立即释放锁。
 
互斥锁模拟
import threading,time
def 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,))

# 启动线程 调用run
t.start()

# 执行结果添加到列表
t_objs.append(t)

print("num",num)
注意:只能在python2版本生效,python3,自动加锁,Ubuntu内可以测试成功。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM