fma*_*ark 6 c multithreading posix pthreads
如果我有一个初始化的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);
}
}
Run Code Online (Sandbox Code Playgroud)
后pthread_barrier_wait()返回时,所有的线程将相继命中屏障和跟进.由于只有一个线程被赋予PTHREAD_BARRIER_SERIAL_THREAD返回值,因此可以安全地使用它来有条件地包装破坏代码,如下所示:
int rc = pthread_barrier_wait(&b)
if ( rc == PTHREAD_BARRIER_SERIAL_THREAD )
{
pthread_barrier_destroy(&b);
}
Run Code Online (Sandbox Code Playgroud)
此外,请注意,如果屏障正在使用(即另一个线程已调用),pthread_barrier_destroy()将返回结果.EBUSYpthread_barrier_wait()
| 归档时间: |
|
| 查看次数: |
3506 次 |
| 最近记录: |