4

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

4

1 回答 1

4

这在很大程度上取决于它们到期的方式和原因。

屏障不关心在哪里调用 pthread_barrier_wait() ,所以如果它是一个编程的过期,那么就在那个时候调用它。屏障计数器递减,当线程被释放时,您可以进行正常的错误检查,然后立即调用 pthread_exit 或其他什么。将 pthread_wait 放在单独的函数中可能会简化事情。

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

如果线程因为被杀死或取消而到期,那么生活会更加复杂,您可能会进入巨大的黑客领域,可能值得重新考虑设计。

于 2011-06-04T22:02:06.387 回答