如果是安全的破坏pthread的障碍? [英] When is it safe to destroy a pthread barrier?
问题描述
如果我有一个初始化pthread_barrier_t,当是安全的破坏呢?就是下面的例子安全吗?
pthread_barrier_t屏障;
...
INT RC = pthread_barrier_wait(B);
如果(RC = PTHREAD_BARRIER_SERIAL_THREAD和放大器;!&安培;!RC = 0){
PERROR(pthread_barrier_wait);
出口(1);
}如果(ID == 0){
如果(pthread_barrier_destroy(及(线程[t_root] .info.tmp_barrier))){
PERROR(pthread_barrier_destroy);
出口(1);
}
}
在 pthread_barrier_wait()
的回报,所有的线程将相继命中屏障和跟进。由于只有一个线程被赋予 PTHREAD_BARRIER_SERIAL_THREAD
的返回值,就可以安全地用它来包裹有条件的破坏code,像这样:
INT RC = pthread_barrier_wait(和b)
如果(RC == PTHREAD_BARRIER_SERIAL_THREAD)
{
pthread_barrier_destroy(和b);
}
此外,要知道, pthread_barrier_destroy()
将返回 EBUSY
的结果,如果障碍是使用(即另一个线程曾呼吁 pthread_barrier_wait()
)。
If I have an initialised pthread_barrier_t, when is it safe to destroy it? Is the following example safe?
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()
returns, all threads will have hit the barrier and are proceeding. Since only one thread is given the PTHREAD_BARRIER_SERIAL_THREAD
return value, it's safe to use that to conditionally wrap the destruction code like so:
int rc = pthread_barrier_wait(&b)
if ( rc == PTHREAD_BARRIER_SERIAL_THREAD )
{
pthread_barrier_destroy(&b);
}
Also, be aware that pthread_barrier_destroy()
will return a result of EBUSY
if the barrier was in use (i.e. another thread had called pthread_barrier_wait()
).
这篇关于如果是安全的破坏pthread的障碍?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!