对于某些并发代码,我想将一堆信号连接成一个电路。在.NET中,我们可以对一组信号执行WaitAll或WaitAny。我想做这样的事情:如何将信号连接到.NET中的复杂电路?
WaitAny (WaitAll (c1, c2), WaitAll (c3, c4)) ;
不幸的是,图书馆不支持将这些操作组合成更复杂的树。我的问题是(1)有没有办法在.NET中做到这一点? (2)在任何语言中是否都有一个精巧的库?
[编辑:科里要求更多信息]
我想建立一个消息传递库。可能有10K个小型并发队列,其中一些带有消息。我想从队列中获取消息并执行分配给队列的处理程序。然而,我不能抓住下一条消息,直到处理程序完成(每个队列单线程)。所以我真的想在弹出并执行下一个项目之前,在队列中(等待消息?)和代码(以前面的消息完成)等待。
我不敢相信我也在这么做。 :) – Tanzelax 2010-03-02 00:16:59
不幸的是,这将为电路中的每个子树分配一个线程。我想要近10K,所以这不会扩展。 API的设计很困难,例如,返回值将如何告诉您在WaitAny中实际触发了哪个子树?想想真正疯狂的深层信号树。 – projectshave 2010-03-02 14:36:57
@projectshave:Ya每个组的线程都不会扩展,但是您可以创建一个单独的线程,以低超时的方式为'WaitAll'负责。仍然不可扩展。 WaitAny返回传入的数组中的对象的索引,以便知道哪个信号被触发。也许你可以用你试图解决的基本问题来更新你的问题,并且有人可能比你描述的WaitAny(WaitAll(),WaitAll())方法有更好的解决方案。 – 2010-03-02 16:02:21