如果我有一个初始化的 pthread_barrier_t,什么时候销毁它是安全的?下面的例子安全吗?
pthread_barrier_t barrier;
...
int rc = pthread_barrier_wait(b);
if (rc != PTHREAD_BARRIER_SERIAL_THREAD && rc != 0){
perror("pthread_barrier_wait");
exit(1);
}
if (id == 0){
if(pthread_barrier_destroy(&(threads[t_root].info.tmp_barrier))){
perror("pthread_barrier_destroy");
exit(1);
}
}
最佳答案
在 pthread_barrier_wait()
返回后,所有线程都会遇到障碍并继续进行。由于只有一个线程被赋予 PTHREAD_BARRIER_SERIAL_THREAD
返回值,因此可以安全地使用它来有条件地包装销毁代码,如下所示:
int rc = pthread_barrier_wait(&b)
if ( rc == PTHREAD_BARRIER_SERIAL_THREAD )
{
pthread_barrier_destroy(&b);
}
此外,请注意,如果屏障正在使用(即另一个线程已调用 pthread_barrier_wait()
)。
关于c - 什么时候销毁 pthread 屏障是安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/874432/