python 中使用多个进程对一个数据进行操作会导致数据不安全的情况,达不到想要的结果,所以需要加锁,示例:
from multiprocessing import Process,Manager,Lock
def change_dict(dict,lock):
dict['count'] -=1
if __name__ == '__main__':
with Manager() as m:
lock = Lock()
dic = m.dict({'count':100})
p_l = []
for i in range(100): # 100 个进程,每个进程减1
p = Process(target=change_dict,args=(dic,lock))
p.start()
p_l.append(p)
for p in p_l:p.join()
print(dic) # 多进程没有枷锁,dic可能为1、0 、2 、3等(数据不安全)
但是对于多线程来说,以下代码没有加锁,但也不会出现数据不安全的现象。请问为什么多线程的数据此时是安全的呢?
# 线程之间的数据共享
from threading import Thread
n = 100
def func():
global n
n -=1
t_l = []
for i in range(100):
t = Thread(target=func)
t.start()
t_l.append(t)
for t in t_l:
t.join()
print(n)