关于 pthread_barrier_wait

Posted

技术标签:

【中文标题】关于 pthread_barrier_wait【英文标题】:about pthread_barrier_wait 【发布时间】:2011-09-08 11:03:34 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

if (must_die)

    do_barrier_wait();
    pthread_exit(NULL);
   

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

【讨论】:

线程不能被杀死。它们可以被取消,但如果需要,它们可以安装一个在屏障上等待的清理处理程序。 Killed 可能是模棱两可的。让我们决定以某种方式发送关闭信号,而无需等待屏障并让其他线程挂起。清理处理程序绝对是另一种清理方式。

以上是关于关于 pthread_barrier_wait的主要内容,如果未能解决你的问题,请参考以下文章

scrapy 关于 rule, 关于多页

JS学习笔记关于选项卡,关于this,关于innerHTML

关于唯典冰淇淋新闻页的布局

关于prototype.js的一些技术说明

主页链接发送到关于/关于页面无法回家

关于写作