自旋鎖是一種互斥鎖的實現(xiàn)方式而已,相比一般的互斥鎖會在等待期間放棄cpu澈蟆,自旋鎖(spinlock)則是不斷循環(huán)并測試鎖的狀態(tài),這樣就一直占著cpu。
互斥鎖:用于保護臨界區(qū)擂橘,確保同一時間只有一個線程訪問數(shù)據(jù)。對共享資源的訪問摩骨,先對互斥量進行加鎖通贞,如果互斥量已經(jīng)上鎖朗若,調用線程會阻塞,直到互斥量被解鎖昌罩。在完成了對共享資源的訪問后哭懈,要對互斥量進行解鎖。
臨界區(qū):每個進程中訪問臨界資源的那段程序稱為臨界區(qū)茎用,每次只允許一個進程進入臨界區(qū)遣总,進入后不允許其他進程進入。
自旋鎖:與互斥量類似轨功,它不是通過休眠使進程阻塞旭斥,而是在獲取鎖之前一直處于忙等(自旋)阻塞狀態(tài)。用在以下情況:鎖持有的時間短古涧,而且線程并不希望在重新調度上花太多的成本垂券。"原地打轉"。
自旋鎖與互斥鎖的區(qū)別:線程在申請自旋鎖的時候羡滑,線程不會被掛起菇爪,而是處于忙等的狀態(tài)。
信號量:信號量是一個計數(shù)器柒昏,可以用來控制多個進程對共享資源的訪問凳宙。它常作為一種鎖機制,防止某進程正在訪問共享資源時职祷,其他進程也訪問該資源氏涩。因此,主要作為進程間以及同一進程內不同線程之間的同步手段堪旧。