簡體   English   中英

原子性 - 鎖定 Vs 原子 Vs 二進制信號量 - 性能

[英]Atomicity - Lock Vs atomic Vs binary-semaphore - Performance

Monitor = mutex(lock) + 條件變量

每個 Java 對象都有一個監視器,遵循上述原則。

synchronized關鍵字聲明對象的監視器(鎖定 + 條件變量)。

我的理解是,對於原子性,不需要條件變量,lock(mutex) 就足夠了。


為了保持內存區域的原子性,Java 提供了Lockatomic package 和binary semaphore

對於原子性,哪種方法在性能方面更好?

這取決於訪問模式: synchronized(var) { ... }使用起來最簡單,因為它不需要顯式解鎖,與ReentrantLock不同。 這兩個是相同的: synchronized(var)將在var上獲取鎖,而Lock將在“自身”上獲取鎖(可以這么說)。 但是ReentrantLock允許您獲取擴展信息(有關更多信息,請參閱其javadocisHeldByCurrentThread()getHoldCount() )。

在性能方面, ReentrantReadWriteLock將在您寫入很少和讀取很多時提高性能(因為當您只讀取時不需要鎖定),但在獲取和釋放鎖時應格外小心,作為“可擁有的同步器”可能會使您的線程死鎖(讀取和寫入鎖的處理方式不同)。

但是,如果您要讀/寫的數據是“簡單類型”(如原子包 javadoc 中所述),您將通過使用AtomicInteger等獲得最佳性能,因為它們使用特定的、優化的 CPU 指令集,例如作為 SSE* 集中的比較和交換

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM