php 自旋锁,Linux内核自旋锁使用笔记
原理
首先,spinlock是一把鎖,它的功能與其他鎖的作用類似,都是對用于臨界區進行原子讀寫。使用這把鎖時,原理上就是不停的循環檢查鎖的狀態,直到可用的時候進入臨界區。
與mutex的區別
Spinlock只進行虛幻檢查,在內核中仍然允許搶占。
Mutex會立即引起調度,因而在一些中斷處理函數中會出問題。
注意:
由于是循環檢查而已,因此臨界區的大小應該限制,否則非常影響效率。
選擇自旋鎖時,要注意考慮中斷(軟中斷與硬中斷;timer中斷屬于軟中斷)
函數和宏定義
頭文件
#include
靜態初始化
spinlock_t a_lock = SPIN_LOCK_UNLOCKED;
宏定義和函數
動態初始化:
spin_lock_init(&a_lock);
判斷自旋鎖是否上鎖:
spin_is_locked(&a_lock);
等待直到spinlock解鎖
spin_unlock_wait(&a_lock);
進入和退出臨界區
spin_lock(&a_lock);
spin_unlock(&a_lock);
保存狀態寄存器值地進入和退出臨界區
int flags;
spin_lock_irqsave(&a_lock, flags);
spin_unlock_irqrestore(&a_lock, flags);
屏蔽硬件中斷地進入和退出臨界區
spin_lock_irq(&a_lock);
spin_unlock_irq(&a_lock);
屏蔽底半部中斷地進入和退出臨界區
spin_lock_bh(&a_lock);
spin_unlock_bh(&a_lock);
總結
以上是生活随笔為你收集整理的php 自旋锁,Linux内核自旋锁使用笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: linux php 依赖,在php5-f
- 下一篇: php兼容编码,PHP截取字符串编码(兼
