[英]ConcurrentHashMap non-blocking reads and memory visibility issue
Java中的ConcurrentHashMap
提供讀取以與更新同時進行。 在這方面的權衡是讀取的結果僅限於反映讀數開始時的最后完成更新,因此未指定反映元素的最新狀態。
但是,AFAIK Java內存模型,在讀寫線程之間沒有某種形式的同步,即使在任意一段時間之后,寫線程的更新也可能對讀線程不可見。
鑒於讀取線程不會阻塞寫入線程,是什么形成了保證讀取線程可用的上次完成更新的可見性的基礎?
我只能在比較和交換算法的方面考慮一些事情,但我無法在該工程的源代碼中驗證它。
讀取值實際上是易失性負載。 雖然它是非阻塞的,但您將確保之前發生的關系,因為商店也是易變的。
Java 5,6,7版本的CHM不使用CAS來交換引用。 但是在工作中有一個更新的輕量級版本可用於它的一些寫入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.