cari

Rumah  >  Soal Jawab  >  teks badan

python - Thread isu keselamatan tentang singleton


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

Di atas adalah cara untuk melaksanakan singleton dalam python, tetapi kita semua tahu bahawa pelaksanaan ini tidak selamat untuk benang. Dalam kod di atas, saya menulis kod ujian sendiri, tetapi mendapati bahawa output id adalah sama. Ini tidak dapat membuktikan bahawa ia tidak selamat untuk benang? Soalan saya ialah: Bagaimana untuk menulis kod ujian yang boleh membuktikan bahawa pelaksanaan ini tidak selamat untuk benang?

给我你的怀抱给我你的怀抱2795 hari yang lalu663

membalas semua(1)saya akan balas

  • 怪我咯

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

    Pada asalnya, mod tunggal hanya boleh membuat seketika satu objek dan tiada kaitan dengan benang. Walaupun ia selamat untuk urutan, ia mengembalikan id yang sama.

    balas
    0
  • Batalbalas