我正在使用pthread_barrier_wait来同步线程,但是在我的程序中,有一个或多个线程可能会过期而其他线程正在等待它们到达pthread_barrier_wait。现在有一种方法,那些在pthread_barrier_wait上停留的线程知道有些线程在所有线程都到达障碍时已经过期了吗?
答案 0 :(得分:4)
这很大程度上取决于他们过期的方式和原因。
屏障并不关心在哪里调用pthread_barrier_wait()所以如果它是一个编程的到期,那么只需在那一点上调用wait。屏障计数器递减,当线程被释放时,您可以执行正常的错误检查,然后立即调用pthread_exit或其他任何内容。将pthread_wait放在一个单独的函数中可能会简化操作。
if (must_die)
{
do_barrier_wait();
pthread_exit(NULL);
}
如果线程即将到期,因为它们被杀或被取消,那么生活就会变得更加复杂,你可能会进入巨大的黑客领域而且可能值得重新考虑设计。