スレッド PTHREAD_SCOPE_SYSTEM または PTHREAD_SCOPE_PROCESS の競合スコープを確立するには、pthread_attr_setscope(3C) を使用します。PTHREAD_SCOPE_SYSTEM スレッドは、システム内のすべてのスレッドと競合します。PTHREAD_SCOPE_PROCESS スレッドは、同じプロセス内のほかのスレッドと競合します。
結合スレッドと非結合スレッドの両方とも、指定されたプロセス内でのみアクセスできます。
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() は、正常終了時に 0 を返します。それ以外の戻り値は、エラーが発生したことを示します。以下の条件が検出されると、この関数は失敗し、対応する値を返します。
EINVAL
説明:tattr に設定しようとした値は無効です。