我已经发布了我的特定问题here,但我只是想知道,如果有任何情况,实例变量最终会在一个线程中“发散”。即,
class Foo:
def __init__(self):
self.x = 0
self.lock = threading.Lock()
def bar(self):
with self.lock:
self.x += 1
def baz(self):
with self.lock:
self.x += 2
如果f = Foo()
和f.bar
以及f.baz
在不同的主题中被调用,bar
的更改是否有可能不会反映在baz
中,反之亦然?
答案 0 :(得分:0)
由于您使用的是Lock
,即使从两个不同的主题调用f.baz
和f.bar
,x
的值也不会过时。
这是因为每个Foo
类实例只能有一个线程可以在给定时间调用baz
或bar
。当一个方法处理时,不能调用另一个方法,并且不会发生竞争条件,因为baz
和bar
中的读 - 修改 - 写操作都是专门完成的