linux – 关于pthread_barrier_wait

我正在使用pthread_barrier_wait来同步线程,但是在我的程序中,有一个或多个线程可能会过期而其他线程正在等待它们到达pthread_barrier_wait.现在有办法,pthread_barrier_wait上的线程知道有些线程已经到期,而所有线程都已到达障碍吗?

解决方法:

这在很大程度上取决于它们如何以及为何过期.

屏障并不关心在哪里调用pthread_barrier_wait()所以如果它是一个编程的到期,那么只需在那一点上调用wait.屏障计数器递减,当线程被释放时,您可以执行正常的错误检查,然后立即调用pthread_exit或其他任何内容.将pthread_wait放在单独的函数中可能会简化操作.

if (must_die)
{
    do_barrier_wait();
    pthread_exit(NULL);
}   

如果线程即将到期,因为它们被杀或被取消,那么生活就会变得更复杂,你可能会进入巨大的黑客领域而且可能值得重新考虑设计.

上一篇:C# 线程同步相关类


下一篇:join、CountDownLatch、CyclicBarrier浅析