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

セマフォの初期化

sema_init(3THR)


#include <thread.h>

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

sema_init(3THR) は、sp が指すセマフォ変数に count の値を初期設定します。type には、次のいずれかを指定できます (arg は現在は無視されます)。

USYNC_PROCESS: 現在のプロセス内のスレッドと他のプロセス内のスレッドとの間で同期をとることができるようにします。ただし、セマフォを初期化するプロセスは 1 つだけに制限してください。arg は無視されます。

USYNC_THREAD: 現在のプロセス内のスレッドの間でだけ同期をとることができるようにします。arg は無視されます。

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

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


#include <thread.h>

sema_t sp;
int ret;
int count;
count = 4;

/* このプロセスの中だけで使用する */
ret = sema_init(&sp, count, USYNC_THREAD, 0); 

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


#include <thread.h>

sema_t sp;
int ret;
int count;
count = 4;

/* すべてのプロセスの間で使用する */
ret = sema_init (&sp, count, USYNC_PROCESS, 0);