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?
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.