考慮下面的代碼:如何實現自旋鎖,以避免阻塞
// Below block executed by thread t1
synchronized(obj) {
obj.wait(0);
}
// This block executed by thread t2
synchronized(obj) {
obj.notify();
}
據我所知,在上面的代碼中,如果t1
採取同步塊的所有權,並在同一時間,如果線程t2
嘗試採取同步塊,然後t2
進入內核等待。 我想避免這種情況,並在塊之前旋轉t2
,直到t1
調用等待並且保留塊的所有權。那可能嗎?
請在提交之前花更多精力來設置您的帖子格式 - 使用預覽功能查看帖子的外觀,並且只有當它看起來您希望它看起來如果*您*正在回答問題時才提交。 – 2014-11-03 07:17:49
另外,你有證據證明這實際上是在你的代碼中造成問題嗎?自旋鎖很少是正確的解決方案 - 並且牢記,只要調用wait(),t1將立即放棄鎖,因此t2阻塞的機會窗口非常小。 – 2014-11-03 07:20:22
你爲什麼想這樣做?相反,在等待鎖的一個線程上,您將有一個線程等待鎖,同時浪費CPU週期。 – 2014-11-03 08:07:36