【发布时间】:2014-10-02 22:18:30
【问题描述】:
给定一个由多个线程使用的对象(=实例),以下方法是最常见的(据我所知):
共享资源:
class Resource():
def return_some_value(self):
return self.somevalue
全局(或父上下文):
lock = Lock()
res = Resource()
在访问线程中:
lock.acquire()
res.return_some_value()
lock.release()
显然访问线程负责锁定和解锁共享资源。
假设共享资源更复杂,一些方法/属性是只读的,而另一些则不是。使用资源的线程现在必须知道哪个是哪个并相应地锁定。这显然容易出错,而且我有时无法选择将 Lock 对象放在何处。
现在我的问题是:是否可以将正确锁定共享资源本身的责任转移?它甚至有意义吗? 比如:
class Resource():
def __init__(self):
self.lock = Lock()
def return_some_value(self):
self.lock.acquire()
return self.somevalue
self.lock.release() # obviously this won't work
【问题讨论】:
标签: python multithreading thread-safety locking