在python的单例类中,类属性和方法局部变量线程安全吗?



我发现这个问题的答案很少,但所有的答案都是基于java的。它们是java特有的。这可能看起来像重复,但我找不到任何python的答案。

我有一个单例类:

class A():
_lock = threading.Lock()
def __new__(cls):
obj = cls.__dict__.get("__it__")
if obj is not None:
return obj
with cls._lock:
if obj is None:
cls.__it__ = obj = object.__new__(cls)
obj.init()
return obj

def init(self):
self.value = 2

def call_me(self, input):
self.value = input
temp = self.value
print(temp)
# two threads call the function at exactly same time.
# thread 1 calls
A().call_me(5)
# thread 2 calls
A().call_me(7)

现在,如果两个线程创建A的对象,那么我确信它的线程是安全的,因为它是双锁检查模式。但是类属性self.value和方法变量temp线程安全吗?

因为如果两个线程都是A的相同实例,那么两个线程都可以改变值,然后这是一个问题?

不,call_me方法不是线程安全的。该锁用于确保只创建该类的一个实例,也就是说,它是单例模式。

相关内容

  • 没有找到相关文章

最新更新