如果我有一个初始化的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_destroy()
将返回EBUSY
的结果(即另一个线程调用了pthread_barrier_wait()
)。
以上就是c/c++开发分享什么时候摧毁pthread屏障是否安全?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/560038.html