Linux 内核自旋锁
生活随笔
收集整理的這篇文章主要介紹了
Linux 内核自旋锁
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么需要內核自旋鎖?
現在很多CPU都是幾核幾核的了,如果有一個變量A,CPU-X正在訪問,突然CPU-Y也過來訪問他,這時候就可能出現問題,因為這個A非常重要,可能導致系統崩潰,中斷異常等。
我們來看之前說的TP驅動里面的代碼
void gtp_irq_enable(struct goodix_ts_data *ts) {unsigned long irqflags = 0;GTP_DEBUG_FUNC();spin_lock_irqsave(&ts->irq_lock, irqflags);if (ts->irq_is_disable) {enable_irq(ts->client->irq);ts->irq_is_disable = 0; }spin_unlock_irqrestore(&ts->irq_lock, irqflags); }
在進行中斷操作的時候,用到了自旋鎖,就是擔心正在操作的時候又被調用,聽起來有點拗口,但是就是那么一回事。
自旋鎖(spinlock)是用在多個CPU系統中的鎖機制,當一個CPU正訪問自旋鎖保護的臨界區時,臨界區將被鎖上,其他需要訪問此臨界區的CPU只能忙等待,直到前面的CPU已訪問完臨界區,將臨界區開鎖。自旋鎖上鎖后讓等待線程進行忙等待而不是睡眠阻塞,而信號量是讓等待線程睡眠阻塞。自旋鎖的忙等待浪費了處理器的時間,但時間通常很短,在1毫秒以下。
自旋鎖用于多個CPU系統中,在單處理器系統中,自旋鎖不起鎖的作用
總結
以上是生活随笔為你收集整理的Linux 内核自旋锁的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL 插入时直接插入当前时间
- 下一篇: Linux 开发者最应该知道的命令汇总