Linux 内核自旋锁
為什么需要內(nèi)核自旋鎖?
現(xiàn)在很多CPU都是幾核幾核的了,如果有一個(gè)變量A,CPU-X正在訪問(wèn),突然CPU-Y也過(guò)來(lái)訪問(wèn)他,這時(shí)候就可能出現(xiàn)問(wèn)題,因?yàn)檫@個(gè)A非常重要,可能導(dǎo)致系統(tǒng)崩潰,中斷異常等。
我們來(lái)看之前說(shuō)的TP驅(qū)動(dòng)里面的代碼
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); }
在進(jìn)行中斷操作的時(shí)候,用到了自旋鎖,就是擔(dān)心正在操作的時(shí)候又被調(diào)用,聽(tīng)起來(lái)有點(diǎn)拗口,但是就是那么一回事。
自旋鎖(spinlock)是用在多個(gè)CPU系統(tǒng)中的鎖機(jī)制,當(dāng)一個(gè)CPU正訪問(wèn)自旋鎖保護(hù)的臨界區(qū)時(shí),臨界區(qū)將被鎖上,其他需要訪問(wèn)此臨界區(qū)的CPU只能忙等待,直到前面的CPU已訪問(wèn)完臨界區(qū),將臨界區(qū)開(kāi)鎖。自旋鎖上鎖后讓等待線程進(jìn)行忙等待而不是睡眠阻塞,而信號(hào)量是讓等待線程睡眠阻塞。自旋鎖的忙等待浪費(fèi)了處理器的時(shí)間,但時(shí)間通常很短,在1毫秒以下。
自旋鎖用于多個(gè)CPU系統(tǒng)中,在單處理器系統(tǒng)中,自旋鎖不起鎖的作用
總結(jié)
以上是生活随笔為你收集整理的Linux 内核自旋锁的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SQL 插入时直接插入当前时间
- 下一篇: ARM指令集(数据处理指令)