頭文件
#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