sem_init

sem_init

sem_init函式是Posix信號量操作中的函式。sem_init() 初始化一個定位在 sem 的匿名信號量。value 參數指定信號量的初始值。 pshared 參數指明信號量是由進程內執行緒共享,還是由進程之間共享。如果 pshared 的值為 0,那么信號量將被進程內的執行緒共享,並且應該放置在這個進程的所有執行緒都可見的地址上(如全局變數,或者堆上動態分配的變數)。

頭檔案

#include<semaphore.h>

函式原型

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

說明

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

參數

sem :指向信號量對象
pshared : 指明信號量的類型。不為0時此信號量在進程間共享,否則只能為當前進程的所有執行緒共享。
value : 指定信號量值的大小

返回值

sem_init() 成功時返回 0;錯誤時,返回 -1,並把 errno 設定為合適的值。

錯誤

EINVAL

value 超過 SEM_VALUE_MAX。

ENOSYS

pshared 非零,但系統還沒有支持進程共享的信號量。

熱門詞條

聯絡我們