将互斥体用作全局变量或实例变量有什么区别? 例如,这两个用法?:
my_lock = RLock()
class myclass:
def __init__(self):
self.mutex = my_lock
def func():
with self.mutex:
#do something
和
class myclass:
def __init__(self):
self.mutex = RLock()
def func():
with self.mutex:
#do something
答案 0 :(得分:1)
您的第一个版本;
my_lock = RLock()
class myclass:
def __init__(self):
self.mutex = my_lock
...为类的所有实例创建一个共同的互斥锁,而
class myclass:
def __init__(self):
self.mutex = RLock()
...为每个实例创建一个互斥锁。
在第一种情况下,互斥锁阻止func
在任何 myclass对象中同时执行。
在第二种情况下,互斥锁阻止func
在单个 myclass对象中同时执行。