頭文件
#include<semaphore.h>函數
函數原型
int sem_init(sem_t *sem, int pshared, unsigned int value);post
說明
sem_init() 初始化一個定位在 sem 的匿名信號量。value 參數指定
信號量的初始值。 pshared 參數指明
信號量是由進程內
線程共享,仍是由進程之間共享。若是 pshared 的值爲 0,那麼
信號量將被進程內的
線程共享,而且應該放置在這個進程的全部線程均可見的地址上(如
全局變量,或者堆上動態分配的變量)。
若是 pshared 是非零值,那麼
信號量將在進程之間共享,而且應該定位
共享內存區域(見 shm_open(3)、mmap(2) 和 shmget(2))。(由於經過 fork(2) 建立的孩子繼承其父親的內存映射,所以它也能夠見到這個
信號量。全部能夠訪問
共享內存區域的進程均可以用
sem_post(3)、
sem_wait(3) 等等操做
信號量。初始化一個已經初始的
信號量其結果未定義。
返回值
sem_init() 成功時返回 0;錯誤時,返回 -1,並把 errno 設置爲合適的值。
錯誤
EINVAL
value 超過 SEM_VALUE_MAX。
ENOSYS
pshared 非零,但系統尚未支持進程共享的
信號量。