Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 关于pthread\u barrier\u wait_Linux_Pthreads_Posix_Barrier - Fatal编程技术网

Linux 关于pthread\u barrier\u wait

Linux 关于pthread\u barrier\u wait,linux,pthreads,posix,barrier,Linux,Pthreads,Posix,Barrier,我正在使用pthread_barrier_wait来同步线程,但在我的程序中,有一个或多个线程可能会在其他线程等待它们到达pthread_barrier_wait时过期。现在有没有一种方法,让卡在pthread_barrier_wait上的线程知道一些线程已经过期,而所有线程都已经到达了屏障?这在很大程度上取决于它们如何过期以及为什么过期 屏障不关心在哪里调用pthread_barrier_wait(),因此如果它是编程过期,那么只需在该点上调用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);
}   

如果线程因被终止或取消而过期,那么生活将更加复杂,你可能会进入一个巨大的黑客领域,可能需要重新考虑设计。

线程不能被终止。它们可以被取消,但如果必要的话,它们可以安装一个在屏障上等待的清理处理程序。让我们决定是否发送一个关闭信号,而不等待屏障,让其他线程挂起。清理处理器绝对是清理的另一种方式。