C語言筆記 訊號量sem t

2021-10-03 14:32:09 字數 843 閱讀 5165

#include
int sem_init(sem_t *sem, int pshared, unsigned int value);
sem_init() 初始化乙個定位在 sem 的匿名信號量。value 引數指定訊號量的初始值。 pshared 引數指明訊號量是由程序內線程共享,還是由程序之間共享。如果 pshared 的值為 0,那麼訊號量將被程序內的執行緒共享,並且應該放置在這個程序的所有執行緒都可見的位址上(如全域性變數,或者堆上動態分配的變數)。

如果 pshared 是非零值,那麼訊號量將在程序之間共享,並且應該定位共享記憶體區域(見 shm_open(3)、mmap(2) 和 shmget(2))。(因為通過 fork(2) 建立的孩子繼承其父親的記憶體對映,因此它也可以見到這個訊號量。所有可以訪問共享記憶體區域的程序都可以用 sem_post(3)、sem_wait(3) 等等操作訊號量。初始化乙個已經初始的訊號量其結果未定義。

int sem_wait(sem_t *sem);
sem_wait 是乙個阻塞的函式,測試所指定訊號量的值,它的操作是原子的。若 sem value > 0,則該訊號量值減去 1 並立即返回。若sem value = 0,則阻塞直到 sem value > 0,此時立即減去 1,然後返回。

int sem_post(sem_t *sem);
把指定的訊號量 sem 的值加 1,喚醒正在等待該訊號量的任意執行緒。

int sem_destroy(sem_t *sem);
該函式用於對用完的訊號量的清理。成功則返回 0,失敗返回 -1

sem t 等相關函式 訊號量

訊號量的資料型別為結構sem t 它本質上是乙個長整型的數。它的原型為 extern int sem init p sem t sem,int pshared,unsigned int value 標頭檔案為 include sem為指向訊號量結構的乙個指標 pshared不為 0時此訊號量在程序間...

筆記 訊號量集

訊號量集,主要作用是保證共享記憶體的使用不發生衝突。訊號量 semaphore 實際是乙個整數,它的值由多個程序進行測試 test 和設定 set 就每個程序所關心的測試和設定操作而言,這兩個操作是不可中斷的,或稱 原子 操作,即一旦開始直到兩個操作全部完成。測試和設定操作的結果是 訊號量的當前值和...

訊號量 二值訊號量

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