017 linux驅動之 訊號量

2021-10-01 17:35:32 字數 972 閱讀 5070

訊號量

訊號量(semaphore)是用於保護臨界區的一種常用方法,只有得到訊號量的程序才能執行臨界區**。

當獲取不到訊號量時,程序進入休眠等待狀態。

定義訊號量

struct semaphore sem;

初始化訊號量

void sema_init (struct semaphore *sem, int val);

void init_mutex(struct semaphore *sem);//初始化為0

static declare_mutex(button_lock); //定義互斥鎖

獲得訊號量

void down(struct semaphore * sem);

int down_interruptible(struct semaphore * sem);

int down_trylock(struct semaphore * sem);

釋放訊號量

void up(struct semaphore * sem);

使用示例:

定義互斥鎖訊號量:

獲取訊號量

在上面獲取訊號量中,因為我們定義的是互斥鎖,所以當執行第一次down(&button_lock);時候可以往下執行,

當第二次執行時候假如沒有釋放的話會進入休眠狀態,不會往下執行了

釋放訊號量

注:定義訊號量時候當然是全域性定義了

獲取訊號量我們一般在open函式中使用

釋放訊號量我們可以在release函式中釋放掉

從上面中我們就可以設定,乙個應用程式只會開啟一次,當開啟第二次時候要正確執行的話需要刪除第乙個應用程式

Linux 之 訊號量

sem init函式 sem destroy函式 sem wait函式 sem trywait函式 sem timedwait函式 sem post函式 以上6 個函式的返回值都是 成功返回0,失敗返回 1,同時設定errno。注意,它們沒有pthread字首 sem init int sem in...

linux同步之訊號量

1.什麼是訊號量 linux sem 訊號量是一種特殊的變數,訪問具有原子性,用於解決程序或執行緒間共享資源引發的同步問題。使用者態程序對 sem 訊號量可以有以下兩種操作 等待訊號量 當訊號量值為 0 時,程式等待 當訊號量值大於 0 時,訊號量減 1,程式繼續執行。傳送訊號量 將訊號量值加 1 ...

linux 之 system v 訊號量

計數器,記錄可以訪問共享資源的次數。保護共享資源 硬體裝置,檔案,共享記憶體等等 訊號量大於0,則可以訪問 訊號量等於0,則不可以訪問。訪問時會將訊號量減1,訪問完成會將訊號量加1。加1減1可由使用者控制 訊號量減小到0之後,程序就不能去訪問共享資源了。int semget key t key,in...