我正在运行以下代码:
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_lock
或sub_500_no_lock
是否不同步执行无关紧要。在一天结束时,行total.value += 5
被精确执行100次,行total.value -= 5
被精确执行100次。执行它们的顺序不应影响结果,该结果应为500。
有什么想法吗?