如果我有一个初始化的 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);
}
}
After 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_destroy()
将返回结果EBUSY
如果屏障正在使用(即另一个线程调用了pthread_barrier_wait()
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)