C中的Pthread障碍是否可重用?

Cal*_*son 6 c pthreads barrier

所以我知道你可以在C中创建障碍来控制线程程序的流程.您可以初始化屏障,让线程使用它,然后销毁它.但是,我不确定是否可以重复使用相同的屏障(例如,它是否在循环中).或者你必须为第二个等待点使用新的障碍吗?例如,下面的代码是否正确(重用相同的障碍)?

#include <pthread.h>
pthread_barrier_t barrier;

void* thread_func (void *not_used) {
     //some code
     pthread_barrier_wait(&barrier);
     //some more code
     pthread_barrier_wait(&barrier);
     //even more code
}

int main() {
    pthread_barrier_init (&barrier, NULL, 2);
    pthread_t tid[2];
    pthread_create (&tid[0], NULL, thread_func, NULL);
    pthread_create (&tid[1], NULL, thread_func, NULL);
    pthread_join(tid[0], NULL);
    pthread_join(tid[1], NULL);
    pthread_barrier_destroy(&barrier);
}
Run Code Online (Sandbox Code Playgroud)

kay*_*lum 9

是的,它们是可重复使用的.该手册页说:

当所需的线程数调用pthread_barrier_wait()时......屏障应重置为最近引用它的pthread_barrier_init()函数所具有的状态.