在共享对象中使用 RLock
Using RLock inside shared object
我有两个线程,每个线程都需要访问一些共享对象。为了保护这个对象的数据,我这样定义它:
class ShareObject:
def __init__(self):
self.mutex = threading.RLock()
self.data = None
def get(self):
self.mutex.acquire()
result = self.data
self.mutex.release()
return result
def set(self, data):
self.mutex.acquire()
self.data = data
self.mutex.release()
这是使用互斥锁保护共享数据的正确方法吗?
我认为这是保护数据的正确方法。每一个更高级的风格都会等同于你写的。
我会怎么写,它的作用相同但更短:
class ShareObject:
def __init__(self):
self.mutex = threading.Lock()
self.data = None
def get(self):
with self.mutex: # with unlocks the mutex even if there is an error or return
return self.data
def set(self, data):
with self.mutex:
self.data = data
# more methods
如果get
和set
是class唯一的方法并且没有人使用mutex属性,你也可以这样写:
class ShareObject:
def __init__(self):
self.data = None
def get(self):
return self.data
def set(self, data):
self.data = data
我有两个线程,每个线程都需要访问一些共享对象。为了保护这个对象的数据,我这样定义它:
class ShareObject:
def __init__(self):
self.mutex = threading.RLock()
self.data = None
def get(self):
self.mutex.acquire()
result = self.data
self.mutex.release()
return result
def set(self, data):
self.mutex.acquire()
self.data = data
self.mutex.release()
这是使用互斥锁保护共享数据的正确方法吗?
我认为这是保护数据的正确方法。每一个更高级的风格都会等同于你写的。
我会怎么写,它的作用相同但更短:
class ShareObject:
def __init__(self):
self.mutex = threading.Lock()
self.data = None
def get(self):
with self.mutex: # with unlocks the mutex even if there is an error or return
return self.data
def set(self, data):
with self.mutex:
self.data = data
# more methods
如果get
和set
是class唯一的方法并且没有人使用mutex属性,你也可以这样写:
class ShareObject:
def __init__(self):
self.data = None
def get(self):
return self.data
def set(self, data):
self.data = data