首页  >  问答  >  正文

python - 关于单例的线程安全问题


class Singleton(object):
    __instance = None

    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
           cls.__instance = super(Singleton, cls).__new__(cls, *args, **kwargs)

        return cls.__instance
    
if __name__ == '__main__':

    # 多线程中单例的使用
    from threading import Thread
    def func():
        print(id(Singleton()))

for index in range(10000):
    Thread(target=func).start()

上面试python中实现单例的一种方式,但是我们都知道这种实现方式不是线程安全的。上面代码中我自己写了测试代码,但是发现id输出都是一样的。这个就证明不了非线程安全的?我的问题是:如何写出可以证明这种实现不是线程安全的测试代码?

给我你的怀抱给我你的怀抱2712 天前588

全部回复(1)我来回复

  • 怪我咯

    怪我咯2017-05-18 10:47:22

    本来单例模式就只能实例化1个对象,跟线程没有任何关系。即使是线程安全的,它也返回相同的id。

    回复
    0
  • 取消回复