日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux kernel同步方法的总结

發布時間:2025/3/21 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux kernel同步方法的总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

        • 1、原子操作
        • 2、自旋鎖、讀寫自旋鎖
        • 3、信號量、讀寫信號量、互斥體
        • 4、完成量
        • 5、大內核鎖
        • 6、順序鎖
        • 7、禁止搶占
        • 8、順序和屏障

1、原子操作

2、自旋鎖、讀寫自旋鎖

(自旋鎖)
spin_lock() 獲取指定的自旋鎖
spin_lock_irq() 禁止本地中斷并獲取指定的鎖
spin_lock_irqsave() 保存本地中斷的當前狀態,禁止本地中斷,并獲取指定的鎖
spin_unlock() 釋放指定的鎖
spin_unlock_irq() 釋放指定的鎖,并激活本地中斷
spin_unlock_irqstore() 釋放指定的鎖,并讓本地中斷恢復到以前狀態

(讀自旋鎖)
read_lock() 獲取指定的讀鎖
read_lock_irq() 禁止本地中斷并獲得指定讀鎖
read_lock_irqsave() 存儲本地中斷的當前狀態,禁止本地中斷并獲得指定讀鎖
read_unlock() 釋放指定的讀鎖
read_unlock_irq() 釋放指定的讀鎖并激活本地中斷
read_unlock_irqrestore() 釋放指定的讀鎖并將本地中斷恢復到指定前的狀態

(寫自旋鎖)
write_lock() 獲得指定的寫鎖
write_lock_irq() 禁止本地中斷并獲得指定寫鎖
write_lock_irqsave() 存儲本地中斷的當前狀態,禁止本地中斷并獲得指定寫鎖
write_unlock() 釋放指定的寫鎖
write_unlock_irq() 釋放指定的寫鎖并激活本地中斷
write_unlock_irqrestore() 釋放指定的寫鎖并將本地中斷恢復到指定前的狀態

3、信號量、讀寫信號量、互斥體

(信號量)
down_interruptible(struct semaphore *) 以試圖獲得指定的信號量,如果信號量已被爭用,則進入可中斷睡眠狀態
down(struct semaphore *) 以試圖獲得指定的信號量,如果信號量已被爭用,則進入不可中斷睡眠狀態
up(struct semaphore *) 以釋放指定的信號量,如果睡眠隊列不空,則喚醒其中一個任務

(讀寫信號量)
讀寫信號量和信號量之間的關系 與 讀寫自旋鎖和普通自旋鎖之間的關系 差不多。
讀寫信號量都是二值信號量,即計數值最大為1,增加讀者時,計數器不變,增加寫者,計數器才減一。
也就是說讀寫信號量保護的臨界區,最多只有一個寫者,但可以有多個讀者。
讀寫信號量的相關內容參見:<asm/rwsem.h> 具體實現與硬件體系結構有關

(互斥體)
mutex_lock(struct mutex *)
mutex_unlock(struct mutex *)

4、完成量

wait_for_completion(struct completion *)
complete(struct completion *)

5、大內核鎖

大內核鎖已經不再使用,只存在與一些遺留的代碼中.
???

6、順序鎖

7、禁止搶占

preempt_disable() 增加搶占計數值,從而禁止內核搶占
preempt_enable() 減少搶占計算,并當該值降為0時檢查和執行被掛起的需調度的任務

8、順序和屏障

rmb() 阻止跨越屏障的載入動作發生重排序
read_barrier_depends() 阻止跨越屏障的具有數據依賴關系的載入動作重排序
wmb() 阻止跨越屏障的存儲動作發生重排序
mb() 阻止跨越屏障的載入和存儲動作重新排序
smp_rmb() 在SMP上提供rmb()功能,在UP上提供barrier()功能
smp_read_barrier_depends() 在SMP上提供read_barrier_depends()功能,在UP上提供barrier()功能
smp_wmb() 在SMP上提供wmb()功能,在UP上提供barrier()功能
smp_mb() 在SMP上提供mb()功能,在UP上提供barrier()功能
barrier() 阻止編譯器跨越屏障對載入或存儲操作進行優化

總結

以上是生活随笔為你收集整理的linux kernel同步方法的总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。