C語言筆記 信號量sem_t

頭文件

#include <semaphore.h>

sem_init

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) 等等操作信號量。初始化一個已經初始的信號量其結果未定義。

sem_wait

int sem_wait(sem_t *sem); 

sem_wait 是一個阻塞的函數,測試所指定信號量的值,它的操作是原子的。若 sem value > 0,則該信號量值減去 1 並立即返回。若sem value = 0,則阻塞直到 sem value > 0,此時立即減去 1,然後返回。

sem_post

int sem_post(sem_t *sem);

把指定的信號量 sem 的值加 1,喚醒正在等待該信號量的任意線程。

sem_destroy

int sem_destroy(sem_t *sem);

該函數用於對用完的信號量的清理。成功則返回 0,失敗返回 -1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章