天天看點

自旋鎖和 信号量 互斥量 了解

程序間通信--鎖

自旋鎖就  鎖住要擷取臨界資源。什麼臨界資源,舉個例子,地鐵上的座位是每個乘車顧客的共享座位,你要是占住用了這時候就屬于你,平時座位跟你沒關系。

如果其他線程想拿到資源的鎖,如果現在資源沒有被鎖住 ,那就鎖住 資源執行流程,如果資源被其他線程鎖定就 目前cpu 死等。

在任何情況下使用spin_lock_irq都是安全的。因為它既禁止本地中斷,又禁止核心搶占。

spin_lock比spin_lock_irq速度快,但是它并不是任何情況下都是安全的。是以在使用spin_lock時要明确知道該鎖不會在中斷處理程式中使用。

信号量,也是資源 被鎖住 ,但是如果拿不到解鎖條件,就放在等待隊列。等到拿到資源時候 會被喚醒

(  循環後面過程,  執行一次排程,主動切換到其他任務,等其他任務釋放互斥鎖時會喚醒目前任務,繼續執行下面的函數)

不同點:

     信号量在建立時需要設定一個初始值,表示同時可以有幾個任務可以通路該信号量保護的共享資源,看着好像 信号量初始值為1就變成互斥鎖。

     信号量加鎖和解鎖 可以在不同線程中 協同工作,但是互斥鎖必須在同一線程中進行加鎖解鎖。

繼續閱讀