generated at
System V セマフォ
ヘッダは sys/sem.h を使う
名前なしセマフォ (メモリベース・セマフォ)
System V セマフォの概観は「svipc」のmanがおすすめ
ipcsコマンドで確認できる
$ ipcs -s
ipcrmで削除
$ ipcpm -s 52


semget()
semop()
semtimedop()
semctl()

semaphore.c
#include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> // セマフォの初期化またはセマフォへのアクセス int semget(key_t key , int nsems , int semflg ); // セマフォの操作 int semop(int semid, struct sembuf *sops, size_t nsops); int semtimedop(int semid, struct sembuf *sops, size_t nsops, const struct timespec *timeout); // セマフォ集合のアクセス権やその他の変更をする int semctl(int semid, int semnum, int cmd, ...);

IPC_CREAT
キー(key)が存在しない場合には新たなエントリを作成する。

IPC_EXCL
キー(key)が存在する場合には失敗する。

IPC_NOWAIT
要求が待たされる場合にはエラーになる。

semaphore.c
#include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> int main() { // セマフォID? key_t key = 1000; // セマフォ配列内の要素数 int nsems = 1; // セマフォのフラグ int semflg = IPC_CREAT; int semid; if ((semid = semget(key, nsems, semflg)) == -1) { perror("semget: semget failed"); exit(1); } else exit(0); }

関連

確認用
Q. Sysmem V セマフォ
Q. セマフォの作成
Q. セマフォの削除

参考

メモ