我正在尝试使用以下代码在 Python 中演示竞争条件,但总是0
获得预期值。我的代码是否有问题,只是它不够"密集"以触发竞争条件?谢谢。
import threading
import time
def race_cond():
foo = 0
flag = threading.Event()
def mutator():
flag.wait()
nonlocal foo
foo += 1
foo -= 1
foo += 1
ts = [threading.Thread(target=mutator)
for i in range(10000)]
[t.start() for t in ts]
flag.set()
[t.join() for t in ts]
return foo
for i in range(100):
print(f'Expecting 10000, actual: {race_cond()}')
mutator()
不会改变任何东西;事实上,它会抛出一个错误,因为你试图改变一个你没有在该函数中定义的局部变量。为了更改foo
您需要在函数中global foo
。