首发于微信民众号:Python编程时光
在并发编程时,若是多个线程接见统一资源,我们需要保证接见的时刻不会发生冲突,数据修改不会发生错误,这就是我们常说的 线程平安 。
那什么情况下,接见数据时是平安的?什么情况下,接见数据是不平安的?若何知道你的代码是否线程平安?要若何接见数据才气保证数据的平安?
本篇文章会逐一回覆你的问题。
1. 线程不平安是怎样的?
要搞清楚什么是线程平安,就要先领会线程不平安是什么样的。
好比下面这段代码,开启两个线程,对全局变量 number 各自增 10万次,每次自增 1。
from threading import Thread, Lock
number = 0
def target():
global number
for _ in range(1000000):
number += 1
thread_01 = Thread(target=target)
thread_02 = Thread(target=target)
thread_01.start()
thread_02.start()
thread_01.join()
thread_02.join()
print(number)
正常我们的预期输出效果,一个线程自增100万,两个线程就自增 200 万嘛,输出肯定为 2000000 。
可事实却并不是你想的那样,不管你运行若干次,每次输出的效果