想象一下有两个线程observeT
和upT
observeT
观察实例属性(instance.a
)的值,如果其值为7
,则应发出“警报”(在本例中打印注释)。然后是线程upT
,它一次将实例属性的值增加1(instance.a
+=1)
但是,由于随机选择的线程继续使用Python的Lock
,我们无法确保观察者线程(observeT
)捕捉到instance.a
的值增加到7
的时刻
如何确保每次upT
释放锁后都调用观察者?请注意,保持线程upT
和observeT
分裂非常重要
有关详细信息,请参阅以下代码:
from threading import Lock, Thread
class MyClass():
a: int
def __new__(cls):
instance = super().__new__(cls)
instance.a = 0
return instance
instance = MyClass()
lock = Lock()
def up():
for i in range(100000):
with lock:
instance.a += 1
def observe():
while True:
with lock:
a = instance.a
if a == 7:
print("This is 7!")
if instance.a == 100000:
break
observeT = Thread(target=observe)
upT = Thread(target=up)
observeT.start()
upT.start()
upT.join()
observeT.join()
谢谢你的帮助
这就是你要找的吗
输出:
相关问题 更多 >
编程相关推荐