Java鎖——自旋鎖和互斥鎖的區別

自旋鎖和互斥鎖的區別

自旋鎖是一種互斥鎖的實現方式而已,相比一般的互斥鎖會在等待期間放棄cpu,自旋鎖(spinlock)則是不斷循環並測試鎖的狀態,這樣就一直佔着cpu。

互斥鎖:用於保護臨界區,確保同一時間只有一個線程訪問數據。對共享資源的訪問,先對互斥量進行加鎖,如果互斥量已經上鎖,調用線程會阻塞,直到互斥量被解鎖。在完成了對共享資源的訪問後,要對互斥量進行解鎖。

臨界區:每個進程中訪問臨界資源的那段程序稱爲臨界區,每次只允許一個進程進入臨界區,進入後不允許其他進程進入。

自旋鎖:與互斥量類似,它不是通過休眠使進程阻塞,而是在獲取鎖之前一直處於忙等(自旋)阻塞狀態。用在以下情況:鎖持有的時間短,而且線程並不希望在重新調度上花太多的成本。“原地打轉”。

自旋鎖與互斥鎖的區別:線程在申請自旋鎖的時候,線程不會被掛起,而是處於忙等的狀態。

信號量:信號量是一個計數器,可以用來控制多個進程對共享資源的訪問。它常作爲一種鎖機制,防止某進程正在訪問共享資源時,其他進程也訪問該資源。因此,主要作爲進程間以及同一進程內不同線程之間的同步手段。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章