これを行う適切な方法は、バリアを使用することです。pthread
を使用してバリアをサポートしpthread_barrier_t
ます。同期する必要のあるスレッドの数で初期化し、次にpthread_barrier_wait
それらのスレッドを同期させるために使用します。
例:
pthread_barrier_t barr;
void thread_worker() {
// do work
// now make all the threads sync up
int res = pthread_barrier_wait(&barr);
if(res == PTHREAD_BARRIER_SERIAL_THREAD) {
// this is the unique "serial thread"; you can e.g. combine some results here
} else if(res != 0) {
// error occurred
} else {
// non-serial thread released
}
}
int main() {
int nthreads = 5;
pthread_barrier_init(&barr, NULL, nthreads);
int i;
for(i=0; i<nthreads; i++) {
// create threads
}
}