是否有并行线程库同步线程的功能? 不互斥,不信号灯,只需一个电话功能。 它应该是锁定在得到该点,直到所有的线程都处于这样的功能的线程。 例如:
function thread_worker(){
//hard working
syncThreads();
printf("all threads are sync\n");
}
所以,只有当所有的线程结束辛勤工作中的printf被调用。
是否有并行线程库同步线程的功能? 不互斥,不信号灯,只需一个电话功能。 它应该是锁定在得到该点,直到所有的线程都处于这样的功能的线程。 例如:
function thread_worker(){
//hard working
syncThreads();
printf("all threads are sync\n");
}
所以,只有当所有的线程结束辛勤工作中的printf被调用。
这样做的正确的方法是用一个障碍 。 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
}
}