互斥锁
一、 代码展示
① 没加锁(X)
import threading
num = 0
def write1():
global num
i = 1
while i
运行结果
result1:1180321
result2:1567595
以上 result2 结果不是一个定值,各种值情况都会出现
② 加了锁(√)
import threading
num = 0
def write1(lock):
global num
i = 1
while i
运行结果
result1:1996142
result2:2000000 # 因为每个线程都会1000000次+1,所以哪个线程最后一次+1输出结果肯定是2000000
二、 总结
- ① 线程之间是共用全局变量的,因为线程是一个进程里分出来的几个任务,使用的是用同一份代码,同样的 变量与资源。
- ② 互斥锁一般用在线程需要 共享全局变量 的时候
- ③ 进程与线程之间的关系与区别:
- ① 进程 包含 多个线程
- ② 进程间 不共用 变量与资源;线程间 共用 变量与资源
- ④ num += 1 分三步执行:
–- cpu从内存中读取num的值( 例如 num = 0)
- cpu把读取到的num值加1( num + 1 = 1)
- cpu把计算完的值重新赋值给内存( num = 1)
Original: https://www.cnblogs.com/fry-hell/p/12825897.html
Author: 油炸地狱
Title: 互斥锁与多线程间共享全局变量
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612677/
转载文章受原作者版权保护。转载请注明原作者出处!