プログラミングインタフェース

セマフォーのセットの初期化

semget(2) は、セマフォーの初期化またはセマフォーへのアクセスを行います。呼び出しが成功すると、セマフォー ID (semid) を返します。key 引数は、セマフォー ID に関連付けられた値です。nsems 引数は、セマフォー配列内の要素数を指定します。nsems が既存の配列の要素数を超えると呼び出しは失敗します。正しい数がわからない場合は、nsems 引数を 0 に指定すると正しく実行されます。semflg 引数は、初期状態のアクセス権と作成の制御フラグを指定します。

SEMMNI システム構成オプションは、配列内のセマフォーの最大数を指定します。SEMMNS オプションは、すべてのセマフォーのセットを通じて個々のセマフォーの最大数を指定します。ただし、セマフォーのセット間の断片化のため、利用できるすべてのセマフォーを割り当てられない場合もあります。

次のコードに、semget(2) の使用例を示します。

#include                        <sys/types.h>
#include                        <sys/ipc.h>
#include                        <sys/sem.h>
...
         key_t    key;       /* key to pass to semget() */
         int      semflg;    /* semflg to pass to semget() */
         int      nsems;     /* nsems to pass to semget() */
         int      semid;     /* return value from semget() */
         ...
         key = ...
         nsems = ...
         semflg = ...
         ...
         if ((semid = semget(key, nsems, semflg)) == –1) {
                 perror("semget: semget failed");
                 exit(1);
         } else
                 exit(0);
...