为什么在没有锁的多个进程中使用multiprocessing.Value会失败?

时间:2019-04-20 19:29:29

标签: python multiprocessing

我正在运行以下代码:

def add_500_no_lock(total):
    for i in range(100):
        time.sleep(0.01)
        total.value += 5


def sub_500_no_lock(total):
    for i in range(100):
        time.sleep(0.01)
        total.value -= 5

if __name__ == '__main__':
    for i in range(5):
       total = Value('i', 500)
       add_proc = Process(target=add_500_no_lock, args=(total,))
       sub_proc = Process(target=sub_500_no_lock, args=(total,))

       add_proc.start()
       sub_proc.start()

       add_proc.join()
       sub_proc.join()
       print(total.value)

打印结果为:

505
585
625
510
515

我不明白为什么它不总是返回500。 我认为,由于total初始化为500,因此add_500_no_locksub_500_no_lock是否不同步执行无关紧要。在一天结束时,行total.value += 5被精确执行100次,行total.value -= 5被精确执行100次。执行它们的顺序不应影响结果,该结果应为500。

有什么想法吗?

0 个答案:

没有答案