sp が指すセマフォー変数を count の値で初期化するには、sema_init(3C) を使用します。
#include <thread.h> int sema_init(sema_t *sp, unsigned int count, int type, void *arg);
type は、次のいずれかになります。
USYNC_PROCESS。セマフォーを使って、このプロセス内のスレッドとほかのプロセス内のスレッドとの間で同期をとることができます。ただし、セマフォーを初期化するプロセスは 1 つだけに制限してください。arg は無視されます。
USYNC_THREAD。セマフォーを使って、このプロセス内のスレッドの間でだけ同期をとることができます。arg は無視されます。
複数のスレッドから同時に同じセマフォーを初期化してはいけません。一度初期化したセマフォーは、ほかのスレッドが使用している可能性があるので、再初期化してはいけません。
#include <thread.h> sema_t sp; int ret; int count; count = 4; /* to be used within this process only */ ret = sema_init(&sp, count, USYNC_THREAD, 0);
#include <thread.h> sema_t sp; int ret; int count; count = 4; /* to be used among all the processes */ ret = sema_init (&sp, count, USYNC_PROCESS, 0);
sema_init() は、正常終了時に 0 を返します。次のいずれかの条件が検出された場合、sema_init() は失敗し、対応する値を返します。
EINVAL
説明:sp が無効なセマフォーを参照しています。
EFAULT
説明:sp または arg が無効なアドレスを指しています。