代码之家  ›  专栏  ›  技术社区  ›  Murali VP

在多线程应用程序中使用屏障的现实世界示例是什么?

  •  2
  • Murali VP  · 技术社区  · 16 年前

    JDK的并发包、Boost的线程库、Perl的线程库(虽然不是在Python中)都实现了屏障,但我没有遇到使用屏障的需求,所以我想知道在多线程应用程序中典型的用例是什么。

    3 回复  |  直到 12 年前
        1
  •  3
  •   Chuck Vose    16 年前

    屏障可以通过人为的例子在整个地方使用,但您通常会在分散/减少方法中看到,在继续之前,不同线程的结果都是必需的。

    例如,如果您想并行排序,您可以将列表拆分N次,启动N个线程来排序它们的部分并暂停,当它们全部完成时,它们会死掉,让父级知道最后可以合并排序的块。(我知道有更好的方法,但这是一种实现)。

    我看到的另一个地方是在并行网络中, 为每个有效载荷发送一定数量的数据。因此,该接口将启动n个桶,等待它们全部填满后再发送出去。当你想到一个分区的T1行时,Sorta是有意义的,在64个多路复用分区上发送一次数据脉冲比发送1个分区的数据要好(因为包必须用0填充,所以基本上成本相同)。

    希望这些事情能让你思考这个问题!

        2
  •  1
  •   jldupont    16 年前

    例子: 一组线程同时工作来计算一个结果集,并且所述结果集(部分/全部)需要作为对“屏障”处的部分/所有线程的下一个处理阶段的输入。

    屏障使同步多个线程更容易,而无需围绕多个线程构建解决方案。 conditions 和; mutexes .

    我不能说我见过 barriers 但经常是这样。在某种程度上,随着线程数量的增加,考虑一个更“分离”的系统来管理可能的死锁可能是值得的。

        3
  •  0
  •   Thulani Chivandikwa    12 年前

    msdn:障碍物是一种阻止并行操作中的单个任务继续进行的对象,直到所有任务到达障碍物为止。当并行操作发生在 阶段,每个阶段都需要在任务之间进行同步。

    Found here

    推荐文章
    Markus  ·  倒计时屏障
    9 年前