這是我的第一個問題,所以請對我溫柔。多核環境下的數據同步(基於Java)
當兩個線程(例如t1和t2)運行在不同的CPU內核上時,會在同一個納秒/處理器週期內調用共享對象上的同步方法嗎?鎖的解決方式如何以及體系結構的哪個元素?
這似乎是一個明顯的問題,但我無法在互聯網上找到任何東西。謝謝!
這是我的第一個問題,所以請對我溫柔。多核環境下的數據同步(基於Java)
當兩個線程(例如t1和t2)運行在不同的CPU內核上時,會在同一個納秒/處理器週期內調用共享對象上的同步方法嗎?鎖的解決方式如何以及體系結構的哪個元素?
這似乎是一個明顯的問題,但我無法在互聯網上找到任何東西。謝謝!
規範只是說同步方法一次只能由一個線程輸入。使用哪種體系結構機制將取決於JVM。
對於Oracle HotSpot(幾乎每個人都可以運行的JVM):C++代碼是GNU,並且可能爲您提供了答案。
但是,如果您只需要保證它「正常工作」,則規範就會給您。
謝謝,這就是我正在尋找的答案。 –
這些日子實際上是用硬件來實現的,所以處理器有一個特殊的指令來允許一個線程脫離許多訪問。這已經從上個世紀的基於軟件的純粹解決方案發展而來,目前的狀態是AtomicInteger所代表的:單一的可變整數,保證線程安全,但不會阻塞。
google「java是如何同步實現的」 – jtahlborn
只有一個線程會在同步方法的情況下鎖定對象。你不能準確地說出哪一個。它由jvm決定。其他線程將等待輪到鎖定被第一個線程釋放。 – Nishant
想象一下廁所排隊,在超級碗的一半時間。很多人,每個人都想要同樣的東西。 Guy A是下一條線,Guy B試圖切斷線路並提前進場。 '同步'是Big Tough Guy,他告訴Guy B退掉f並排隊等候Guy A完成。這是多線程。 – flavian