from threading import Thread import threading """ 问题:多线程共享内存问题,当多个线程操作同一个数据的时候,就会出现数据错乱的问题 例: (1)num += 2 -----> num = num + 2 实际会操作两步 会先执行 num + 2, 并放到临时存储区 如果此时跳到了 (2)num += 5 -----> num = num + 5 会先执行 num + 5, 则此时临时存储区的 num 的值会变成107 此时(1)中表达式再执行赋值的时候,num的值就会变成107了 然后(2)中的表达式再执行赋值的时候,num的值也会变成107了 解决方法: 加锁 1. 把需要看成整体的代码前加锁 2.需要加锁的代码 3.释放所 优点:1、保证数据的安全性 缺点:2、运行速度慢 一般尽量不要这样做 死锁:锁定的代码快可能出现异常,出现异常之后,后面的代码就不会执行 则该锁就不会得到释放,而其他的线程可能需要等待该锁释放之后才能执行, 如果没有释放,就会一直等待,就会出现死锁现象,直到系统将其关闭 """ num = 100 #创建一个锁 lock1 = threading.Lock() def editNum1(): global num for i in range(1000000): #加上锁 lock1.acquire() num += 2 num -=2 #释放所 lock1.release() print("editNum1的值为:%d"%num) def editNum2(): global num for i in range(1000000): # 加上锁 lock1.acquire() num += 5 num -= 5 lock1.release() print("editNum2值:%d"%num)
Python线程编程已及内存共享问题
最新推荐文章于 2024-01-15 17:20:11 发布