python - Thread isu keselamatan tentang singleton
给我你的怀抱
给我你的怀抱 2017-05-18 10:45:22
0
1
647

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?

给我你的怀抱
给我你的怀抱

membalas semua(1)
刘奇

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan