自旋鎖和互斥鎖的區別
自旋鎖是一種互斥鎖的實現方式而已,相比一般的互斥鎖會在等待期間放棄cpu,自旋鎖(spinlock)則是不斷循環並測試鎖的狀態,這樣就一直佔着cpu。
互斥鎖:用於保護臨界區,確保同一時間只有一個線程訪問數據。對共享資源的訪問,先對互斥量進行加鎖,如果互斥量已經上鎖,調用線程會阻塞,直到互斥量被解鎖。在完成了對共享資源的訪問後,要對互斥量進行解鎖。
臨界區:每個進程中訪問臨界資源的那段程序稱爲臨界區,每次只允許一個進程進入臨界區,進入後不允許其他進程進入。
自旋鎖:與互斥量類似,它不是通過休眠使進程阻塞,而是在獲取鎖之前一直處於忙等(自旋)阻塞狀態。用在以下情況:鎖持有的時間短,而且線程並不希望在重新調度上花太多的成本。“原地打轉”。
自旋鎖與互斥鎖的區別:線程在申請自旋鎖的時候,線程不會被掛起,而是處於忙等的狀態。
信號量:信號量是一個計數器,可以用來控制多個進程對共享資源的訪問。它常作爲一種鎖機制,防止某進程正在訪問共享資源時,其他進程也訪問該資源。因此,主要作爲進程間以及同一進程內不同線程之間的同步手段。