自旋鎖最多只能被乙個可執行單元持有,自旋鎖不會引起呼叫者睡眠,
如果乙個執行執行緒試圖獲得乙個已經被持有的自旋鎖,那麼執行緒就會一直進行忙碌環,一直等待下去,
在那裡看是否該自旋鎖的保持者已經釋放了鎖,「 自旋 」 就是這個意思.
spin_lock_init ( x )
該巨集用於 初始化自旋鎖 x,自旋鎖在使用前必須先初始化.
spin_lock ( lock )
獲取自旋鎖 lock ,如果成功,立即獲得鎖,並馬上返回,否則它將一直自旋在那裡,直到該自旋鎖的
保持者釋放.
spin_trylock ( lock )
試圖獲取自旋鎖 lock ,如果能立即獲得鎖,並返回真,
否則立即返回假, 它不會一直等待被釋放.
spin_unlock ( lock )
釋放自旋鎖 lock ,它與 spin_trylock 或 spin_lock 配對使用.
訊號量是睡眠鎖,自旋鎖是忙等鎖.
1,訊號量可能允許多個持有者,而自旋鎖在任何時候只能允許乙個持有者.
當然也有訊號量叫互斥訊號量 ( 只能有乙個持有者 ),允許有多個持有者的訊號量叫計數訊號量.
2,訊號量適合於保持時間長的情況;而自旋鎖適合於保持時間非常短的情況.
在實際應用中,自旋鎖控制的**只有幾行,而持有自旋鎖的時間也一般不會超過兩次上下文
切換的時間,因為執行緒一旦要進行切換,就至少花費切出切入兩次,自旋鎖的占用時間如果遠
遠長於兩次上下文切換 ,我們就應該選擇訊號量.
C 併發程式設計 自旋鎖
自旋鎖是指當乙個執行緒在獲取鎖的時候,如果鎖已經被其它執行緒獲取,那麼該執行緒將迴圈等待,然後不斷的判斷鎖是否能夠被成功獲取,直到獲取到鎖才會退出迴圈。include pch.h include include include include using namespace std class sp...
linux驅動之 訊號量 自旋鎖 互斥體
0 原子操作 原子操作就是單位操作,也就是說操作過程不能被中斷 下面 中每條語句看起來是原子操作,其實不是原子操作 int main 0 這兩條c語句度不是原子操作,某條彙編語句可能會被其他程序或者執行緒打斷 使對整形資料 int 操作變成原子操作,要依靠乙個資料型別 atomic t atomic...
字元裝置驅動第八課 自旋鎖
原始碼目錄下include linux spinlock.hstatic spinlock t lock 定義乙個自旋鎖spin lock init lock spin lock lock spin unlock lock include include include include includ...