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()
这是使用互斥锁保护共享数据的正确方法吗?
答案 0 :(得分:0)
我认为这是保护数据的正确方法。每一种更高级的风格都与你所写的相同。
我如何写它,它做同样但更短:
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 ShareObject:
def __init__(self):
self.data = None
def get(self):
return self.data
def set(self, data):
self.data = data