訊號量學習

2022-09-08 04:06:11 字數 1136 閱讀 8155

(一)概念

訊號量是乙個整數,這個整數允許多程序或多執行緒同步他們的操作。這個整數必須大於等於0.

linux庫函式中,類似有名對映、匿名對映,有名管道、無名管道,訊號量也有有名訊號量和匿名信號量。匿名信號量在記憶體中,不在檔案系統中,一般用於執行緒之間的同步;有名訊號量需要建立檔案,一般用於程序之間的同步。有名訊號量見:有名訊號量

(二)匿名信號量庫函式

#include

int sem_init(sem_t *sem, int pshared, unsigned int value);

功能:初始化乙個匿名信號量

引數:sem 指定了要初始化的訊號量的位址

pshared 0 多執行緒 非0 多程序

value 指定了訊號量的初始值

返回值:

成功 0

錯誤 -1 errno被設定

#include

int sem_destroy(sem_t *sem);

功能:銷毀乙個匿名信號量

引數:sem 指定要銷毀的匿名信號量的位址

返回值:

成功 0

錯誤 -1 errno被設定

#include

int sem_post(sem_t *sem);

功能:訊號量的值加1操作.如果因此變為大於0.等待訊號量的值變為大於0的程序或執行緒被喚醒,繼續對訊號量的值減一.

引數:sem 指定具體的訊號量

返回值:

成功 0

錯誤 -1 errno被設定 訊號量的值不變

#include

int sem_wait(sem_t *sem);

功能:減一操作 如果當前訊號的值大於0,繼續立即返回.

如果當前訊號量的值等於0.阻塞,直到訊號量的值變為大於0.

引數:sem 指定具體的訊號量

返回值:

成功 0

錯誤 -1 errno被設定 訊號量的值不變

int sem_trywait(sem_t *sem);

功能:嘗試wait,不阻塞

int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);

功能:帶時間的wait

參考部落格:

訊號量 二值訊號量

訊號量 二值訊號量 訊號量是作業系統的重要部分,訊號量一般用來進行資源管理和任務同步。freertos中訊號量分為二值訊號量 互斥訊號量 計數訊號量和遞迴互斥訊號量,應用場景各不同。二值訊號量通常用於互斥訪問或同步,二值訊號量和互斥訊號量非常相似,但互斥訊號量有優先順序,二值訊號量沒有。因此二值訊號...

python訊號量 Python訊號量

python訊號量教程 訊號量是由作業系統管理的一種抽象資料型別,用於在多執行緒中同步對共享資源的使用。本質上說,訊號量是乙個內部資料,用於標明當前的共享資源可以有多少併發讀取。也可以簡單的理解為,訊號量是多把鎖,同時允許多個執行緒來更改資料,而 python訊號量與互斥鎖的關係 訊號量的乙個特殊用...

訊號 訊號量

訊號是由 系統或者程序傳送給目標程序的資訊,以通知目標程序某個狀態的改變或系統異常。linux訊號可以由如下條件產生 1 對於前台程序,使用者可以通過輸入特殊的終端字元來給它傳送訊號。比如輸入ctrl c通常或給程序傳送乙個中斷訊號 2 系統異常。比如浮點異常和非法記憶體段訪問。3 系統狀態變化 4...