在多线程应用程序中使用屏障的真实示例是啥?
Posted
技术标签:
【中文标题】在多线程应用程序中使用屏障的真实示例是啥?【英文标题】:What would be a realworld example of use of a barrier in a multithreaded application?在多线程应用程序中使用屏障的真实示例是什么? 【发布时间】:2010-12-22 16:15:51 【问题描述】:JDK 的并发包、Boost 的线程库、Perl 的 Thread 库(虽然不是在 Python 中)都实现了屏障,我没有遇到过使用屏障的需要,所以想知道多线程中的典型用例是什么应用程序。
【问题讨论】:
【参考方案1】:障碍可以通过人为的示例在任何地方使用,但您通常会在分散/减少方法中看到它们,其中在继续之前需要所有不同线程的结果。
如果您想并行化排序,例如,您可以将列表拆分 n 次并启动 n 个线程以对其部分进行排序并暂停,当它们全部完成时,它们会死,让父级知道最终可以合并排序的块。 (我知道有更好的方法,但这是一种实现)。
我见过的另一个地方是并行网络,您必须在每个负载中发送一定数量的数据。所以接口会启动n个桶并等待它们全部填满,然后再发送传输。当您考虑分区的 T1 线路时,它是有道理的,在 64 个多路复用分区上发送一个数据突发比发送 1 个分区的数据要好(这基本上成本相同,因为数据包必须用 0 填充。)
希望这些事情能让你思考这个问题!
【讨论】:
【参考方案2】:示例:一组线程同时工作以计算结果集,并且需要所述结果集(部分/全部)作为下一阶段处理部分/全部的输入“障碍”上的线程。
屏障可以更轻松地同步多个线程,而无需围绕多个 conditions
和 mutexes
制定解决方案。
我不能说我经常看到barriers
。在某些时候,随着线程数量的增加,可能值得考虑使用更加“解耦”的系统来管理可能的死锁。
【讨论】:
【参考方案3】:MSDN:Barrier 是一个对象,可防止并行操作中的单个任务继续执行,直到所有任务都到达障碍。当并行操作发生在 阶段,并且每个阶段都需要任务之间的同步。
Found here
【讨论】:
以上是关于在多线程应用程序中使用屏障的真实示例是啥?的主要内容,如果未能解决你的问题,请参考以下文章