【问题标题】:How to implement waitAny on more than 64 handles?如何在超过 64 个句柄上实现 waitAny?
【发布时间】:2012-02-01 00:38:03
【问题描述】:

如何在超过 64 个句柄上实现waitAny

我有一个简单的问题,我有很多线程一直在工作,直到数据结束,当线程结束数据时,然后向线程发信号通知我为空闲线程运行这个 waitAny 并给他下一个数据包。

【问题讨论】:

标签: c# multithreading


【解决方案1】:

您可能需要考虑为等待的“waitAny”线程实现通知数据包队列之类的功能。当您的众多线程中的一个完成它的操作时,它会将一个通知数据包放在队列中。您的 waitAny 变成等待单个事件,表明队列中有东西。

【讨论】:

  • +1 “级联等待”听起来很混乱,需要不止一次上下文更改。 TBH,OP 听起来像一个 P-C 队列和一个线程池。
【解决方案2】:

使用额外的线程实现级联等待,以等待 WaitHandles 包并在层次结构上向其他线程发出信号。

或者在没有实际等待的情况下批量测试它们(没有设置超时)

【讨论】:

    【解决方案3】:

    有效等待受 API MAXIMUM_WAIT_OBJECTS 的限制,即 64。除了重新设计您的应用以使用更少的句柄之外,您还可以切换到轮询模式(分别等待每个 64,超时为零,并等待小的非- 如果所有句柄都没有发出信号,则为零数量),或者拆分对象并在多个执行线程之间等待。

    您可能还想重温之前的讨论,例如

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-26
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 2013-01-02
      • 2018-07-18
      • 2011-12-30
      相关资源
      最近更新 更多