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

スコープの設定

スレッド PTHREAD_SCOPE_SYSTEM または PTHREAD_SCOPE_PROCESS の競合スコープを確立するには、pthread_attr_setscope(3C) を使用します。PTHREAD_SCOPE_SYSTEM スレッドは、システム内のすべてのスレッドと競合します。PTHREAD_SCOPE_PROCESS スレッドは、同じプロセス内のほかのスレッドと競合します。


注 –

結合スレッドと非結合スレッドの両方とも、指定されたプロセス内でのみアクセスできます。


pthread_attr_setscope の構文

int pthread_attr_setscope(pthread_attr_t *tattr,int scope);
#include <pthread.h>

pthread_attr_t tattr;
int ret;

/* bound thread */
ret = pthread_attr_setscope(&tattr, PTHREAD_SCOPE_SYSTEM);

/* unbound thread */
ret = pthread_attr_setscope(&tattr, PTHREAD_SCOPE_PROCESS);

この例には、3 つの関数呼び出しがあります。 1 つめは属性を初期化する呼び出し、2 つめはデフォルト属性を変更する呼び出し、3 つめは pthread を生成する呼び出しです。

#include <pthread.h>

pthread_attr_t attr;
pthread_t tid;
void *start_routine(void *);
void *arg;
int ret;

/* initialized with default attributes */
ret = pthread_attr_init (&tattr);

ret =  pthread_attr_setscope(&tattr, PTHREAD_SCOPE_SYSTEM);
ret = pthread_create (&tid, &tattr, start_routine, arg);

pthread_attr_setscope の戻り値

pthread_attr_setscope() は、正常終了時に 0 を返します。それ以外の戻り値は、エラーが発生したことを示します。以下の条件が検出されると、この関数は失敗し、対応する値を返します。


EINVAL

説明:

tattr に設定しようとした値は無効です。