Heim  >  Fragen und Antworten  >  Hauptteil

python – Thread-Sicherheitsprobleme bei Singletons


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()

Das Obige ist eine Möglichkeit, einen Singleton in Python zu implementieren, aber wir alle wissen, dass diese Implementierung nicht threadsicher ist. Im obigen Code habe ich den Testcode selbst geschrieben, aber festgestellt, dass die ID-Ausgabe dieselbe ist. Dies kann nicht beweisen, dass es nicht Thread-sicher ist. Meine Frage ist: Wie schreibe ich Testcode, der beweisen kann, dass diese Implementierung nicht Thread-sicher ist?

给我你的怀抱给我你的怀抱2711 Tage vor585

Antworte allen(1)Ich werde antworten

  • 怪我咯

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

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

    Antwort
    0
  • StornierenAntwort