python - 關(guān)于單例的線程安全問題
問題描述
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中實(shí)現(xiàn)單例的一種方式,但是我們都知道這種實(shí)現(xiàn)方式不是線程安全的。上面代碼中我自己寫了測試代碼,但是發(fā)現(xiàn)id輸出都是一樣的。這個(gè)就證明不了非線程安全的?我的問題是:如何寫出可以證明這種實(shí)現(xiàn)不是線程安全的測試代碼?
問題解答
回答1:本來單例模式就只能實(shí)例化1個(gè)對象,跟線程沒有任何關(guān)系。即使是線程安全的,它也返回相同的id。
相關(guān)文章:
1. java - spring boot 如何打包成asp.net core 那種獨(dú)立應(yīng)用?2. java - 在用戶不登錄的情況下,用戶如何添加保存到購物車?3. javascript - webpack 分割加載代碼后,react 界面不更新4. 安全性測試 - nodejs中如何防m(xù)ySQL注入5. html - eclipse 標(biāo)簽錯(cuò)誤6. javascript - nginx反向代理靜態(tài)資源403錯(cuò)誤?7. python文檔怎么查看?8. javascript - 關(guān)于apply()與call()的問題9. datetime - Python如何獲取當(dāng)前時(shí)間10. android - SwipeRefreshLayout5.0以下不兼容
