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

歡迎訪問 生活随笔!

生活随笔

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

linux

linux 信号量锁 内核,Linux内核信号量互斥锁应用

發布時間:2023/12/2 linux 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 信号量锁 内核,Linux内核信号量互斥锁应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

主要介紹了Linux 內核關于信號量,互斥鎖等的應用

內核同步機制-信號量/互斥鎖/讀-寫信號量 sema ,mutex ,rwsem

信號量

通用信號量

用戶類進程之間使用信號量(semaphore)進行同步,內核線程之間也使用了信號量,一個線程完成了某一個動作就通過信號量告訴別的線程,別的線程再進行某些動作。信號量與自旋鎖類似,保護臨界區代碼。但信號量與自旋鎖有一定的區別,信號量在無法得到資源時,內核線程處于睡眠阻塞狀態,而自旋鎖處于忙等待狀態。因此,如果資源被占用時間很短時,使用自旋鎖較好,因為它可節約調度時間。如果資源被占用的時間較長,使用信號量較好,因為可讓CPU調度去做其它進程的工作。

函數定義 功能說明

sema_init(struct semaphore *sem, int val) 初始化信號量,將信號量計數器值設置val。 down(struct semaphore *sem) 獲取信號量,不建議使用此函數。

down_interruptible(struct semaphore *sem) 可被中斷地獲取信號量,如果睡眠被信號中斷,返回錯誤-EINTR。

down_killable (struct semaphore *sem) 可被殺死地獲取信號量。如果睡眠被致命信號中斷,返回錯誤-EINTR。

down_trylock(struct semaphore *sem) 嘗試原子地獲取信號量,如果成功獲取,返回0,不能獲取,返回1。

down_timeout(struct semaphore *sem, long jiffies) 在指定的時間jiffies內獲取信號量,若超時未獲取,返回錯誤-ETIME。

up(struct semaphore *sem) 釋放信號量sem。

樣例:信號量的使用

下面函數do_utimes利用信號量防止多個線程對文件系統節點inode同時進行訪問。其列出如下(在fs/open.c中):

long do_utimes(char __user * filename, struct timeval * times)

{

struct inode * inode;

……

down(&inode->i_sem); //獲取信號量

error = notify_change(nd.dentry, &newattrs);//修改inode中值

up(&inode->i_sem); //釋放信號量

……

}

下面說明信號量API函數。

(1)信號量結構semaphore

信號量用結構semaphore描述,它在自旋鎖的基礎上改進而成,它包括一個自旋鎖、信號量計數器和一個等待隊列。用戶程序只能調用信號量API函數,而不能直接訪問信號量結構,其列出如下(在include/linux/semaphore.h中):

總結

以上是生活随笔為你收集整理的linux 信号量锁 内核,Linux内核信号量互斥锁应用的全部內容,希望文章能夠幫你解決所遇到的問題。

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