我有竞争条件的Python代码。
import threading
class Counter:
def __init__(self):
self.x = 0
def incr(self):
self.x += 1
def __str__(self):
return str(self.x)
x = Counter()
class T(threading.Thread):
def run(self):
for i in range(100000):
x.incr()
t1 = T()
t2 = T()
t1.start()
t2.start()
t1.join()
t2.join()
print(x)
我试图用valgrind来检测它。
valgrind --tool=helgrind --suppressions=valgrind-python.supp \python -E -tt ./1.py
0 errors from 0 contexts (suppressed: 9 from 9)
我可以使用valgrind来检测Python代码中的竞争条件吗?
答案 0 :(得分:0)
Python的标准实现使用全局解释器锁来确保一次只有一个线程可以执行Python字节码。
所以从valgrind的角度来看,只有一个线程在运行。