
250
14
章 マルチスレッド処理
}
else
{
fprintf(stderr, "Producer %d: error storing %d\n", id, data);
return -id;
}
}
return count;
}
int consumer(void* arg) //
消費者のスレッド関数
{
struct Arg* argPtr = (struct Arg*) arg;
int id = argPtr->id;
Buffer* bufPtr = argPtr->bufPtr;
int count = 0;
int data = 0;
while (bufGet(bufPtr, &data, 2))
{
++count;
printf("Consumer %d consumed %d\n", id, data);
}
return count;
}
14.4
スレッド局所オブジェクトとスレッド専用記憶
スレッド局所オブジェクトとスレッド専用記憶とは、変数に大域識別子を使いながら各
スレッドが別々のデータを管理できる2つの技法だ。他のスレッドが同じ関数を実行してい
ても所与のスレッドで実行される関数が衝突を起こすことなくデータを共有できるように
する。
14.4.1
スレッド局所オブジェクトを使う
新たな記憶域クラス指定子
_Thread_local
を宣言に含む大域または静的オブジェクトは
スレッド局所オブジェクトだ。それは、各スレッドが、スレッド開始時に生成初期化したオ