マルチスレッドのプログラミング

セマフォーの初期化

sp が指すセマフォー変数を count の値で初期化するには、sema_init(3C) を使用します。

sema_init の構文

#include <thread.h>

int sema_init(sema_t *sp, unsigned int count, int type,
    void *arg);

type は、次のいずれかになります。

複数のスレッドから同時に同じセマフォーを初期化してはいけません。一度初期化したセマフォーは、ほかのスレッドが使用している可能性があるので、再初期化してはいけません。

プロセス内スコープでのセマフォー

#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 の戻り値

sema_init() は、正常終了時に 0 を返します。次のいずれかの条件が検出された場合、sema_init() は失敗し、対応する値を返します。


EINVAL

説明:

sp が無効なセマフォーを参照しています。


EFAULT

説明:

sp または arg が無効なアドレスを指しています。