是否有任何理由提供一個鎖定機制(否則會是)不可變的數據?不可變的數據和鎖定
1
A
回答
5
通常,沒有。使用不可變數據的一個主要優點是可以避免鎖定,因爲您可以隱式保證數據是「最新」的,包括您在內的任何人都無法修改它。
1
不,如果它確實是完全不可變的。
3
在某些情況下,如果某個只讀接口提供了AcquireReadLock方法(如果該接口的某些實現可能需要鎖定),則可能需要該方法。實現接口的不可變對象不一定要做任何事情來響應AcquireReadLock請求,但它必須爲該方法提供至少一個存根實現;在嘗試執行一系列讀取操作之前,該方法的用戶可能需要調用AcquireReadLock,如果某些其他線程在它們之間改變了對象,則可能會產生不希望的結果(請注意,即使該對象不能使用只讀接口,只讀接口的存在並不意味着該對象不會通過其他方式進行變異)。此外,即使一個否則不可變的對象不需要鎖定,它仍然可能想要有一個「模擬」鎖定的選項,以確認對象的使用者正確獲取和釋放鎖。
相關問題
- 1. 彈簧數據和鎖定
- 2. 將可變對象鎖定爲python中的不可變
- 3. Vertica數據庫拋出不可用:查詢的啓動器鎖定 - 鎖定失敗:超時X鎖定
- 4. 的SQLException:數據庫文件被鎖定(數據庫被鎖定)
- 5. 不鎖定線程之間的數據可見性
- 6. 鎖定數據庫
- 7. 數據庫鎖定
- 8. 鎖定數據庫
- 9. 組合數據和鎖定時不可能是常量正確的?
- 10. 從C#winform鎖定和解鎖sql數據庫中的行
- 11. ReactJs:不可變的數據
- 12. TransactionScope和SQLite數據庫被鎖定
- 13. 數據庫事務和鎖定
- 14. SQLAlchemy和SQLite:數據庫被鎖定
- 15. 用SQLite和C「數據庫被鎖定」#
- 16. Android線程和數據庫鎖定
- 17. 函數可以鎖定互斥鎖嗎?
- 18. 在C++ 98互斥鎖中鎖定變量共享數據互斥鎖
- 19. sqlite_finalize不釋放數據庫鎖定
- 20. 可變boost :: mutex是否可以分開鎖定和等待函數?
- 21. 鎖定站時檢查數據庫鎖
- 22. Excel數據連接可以鎖定數據庫表嗎?
- 23. 觸發或存儲鎖定和解鎖數據庫15分鐘
- 24. Grails spock數據庫鎖定
- 25. SQLite數據庫被鎖定
- 26. 彈簧數據鎖定
- 27. 數據庫被鎖定?
- 28. 數據庫鎖定:ActiveRecord + Heroku
- 29. SQL數據庫被鎖定
- 30. VB.NET SQL數據庫鎖定
通常?這聽起來像是一個漏洞。你能詳細說明一下嗎? –
@trinithis我特別說明了這一點,因爲您沒有指定語言,平臺或框架等。我不知道任何語言在線程情況下會對不可變數據產生問題,但我不想要完全關上門,因爲我個人並沒有使用過每一個門。但是,對於主要的語言,它應該是安全的... –