0

這是我的第一個問題,所以請對我溫柔。多核環境下的數據同步(基於Java)

當兩個線程(例如t1和t2)運行在不同的CPU內核上時,會在同一個納秒/處理器週期內調用共享對象上的同步方法嗎?鎖的解決方式如何以及體系結構的哪個元素?

這似乎是一個明顯的問題,但我無法在互聯網上找到任何東西。謝謝!

+1

google「java是如何同步實現的」 – jtahlborn

+0

只有一個線程會在同步方法的情況下鎖定對象。你不能準確地說出哪一個。它由jvm決定。其他線程將等待輪到鎖定被第一個線程釋放。 – Nishant

+2

想象一下廁所排隊,在超級碗的一半時間。很多人,每個人都想要同樣的東西。 Guy A是下一條線,Guy B試圖切斷線路並提前進場。 '同步'是Big Tough Guy,他告訴Guy B退掉f並排隊等候Guy A完成。這是多線程。 – flavian

回答

0

規範只是說同步方法一次只能由一個線程輸入。使用哪種體系結構機制將取決於JVM。

對於Oracle HotSpot(幾乎每個人都可以運行的JVM):C++代碼是GNU,並且可能爲您提供了答案。

但是,如果您只需要保證它「正常工作」,則規範就會給您。

+0

謝謝,這就是我正在尋找的答案。 –

1

這些日子實際上是用硬件來實現的,所以處理器有一個特殊的指令來允許一個線程脫離許多訪問。這已經從上個世紀的基於軟件的純粹解決方案發展而來,目前的狀態是AtomicInteger所代表的:單一的可變整數,保證線程安全,但不會阻塞。

例如:Intel Haswell Architecture