pthread库中是否有一个函数来同步线程?不是互斥体,不是信号量,只是一个调用函数。它应该锁定进入该点的线程,直到所有线程都达到这样的功能。 E.g:
function thread_worker(){
//hard working
syncThreads();
printf("all threads are sync\n");
}
所以只有当所有线程结束努力工作时才会调用printf。
答案 0 :(得分:19)
执行此操作的正确方法是使用屏障。 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
}
}