Luna_Lovegood_001 2021-02-14 09:50 采纳率: 40%
浏览 26

多线程与多进程的数据安全

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)
  • 写回答

1条回答 默认 最新

  • 给你骨质唱疏松 2021-02-14 10:26
    关注

    是的, 加互斥锁(同步锁、排他锁), 将局部操作变成串行运行, 牺牲了效率提升了安全性

    评论

报告相同问题?