python高级进阶_25_避免并发引起的问题(全局变量计算错误)02

上一节 我们讲了 避免并发的问题,可以用轮询的方法可以解决。

轮询方法

但是有个缺点就是用死循环浪费CPU. 针对这样的问题,python 设计了 互斥锁

把代码改下:

import threading ,time

def work1():
    global num
    mutex.acquire()  # 上锁
    for i in range(100000):
        num += 1
    mutex.release()  # 开锁
    print("work"+str(num) )
def work2():
    global num
    mutex.acquire()   # 上锁
    for i in range(100000):
        num += 1
    mutex.release()  #释放
    print("work2 %s"%num)
if __name__=='__main__':
    mutex=threading.Lock()  # 创建一个锁对象
    num=0
    t1 = threading.Thread(target=work1)
    t1.start()     #线程1 运行
    t2 = threading.Thread(target=work2)
    t2.start() # 线程2 运行

执行过程是 :

当谁拿到这个锁 就锁住,其他线程一看是锁住了, 就需要等待, 当执行完成 就把锁释放, 其他线程就开始争取锁控制权,
拿到锁控制权后,就开始锁住。

控制一个线程执行,其他线程进行等待 锁释放

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值