Для некоторого параллельного кода я хочу подключить связку сигналов вместе, как схема. В .NET мы можем сделать WaitAll или WaitAny в наборе сигналов. Я хочу сделать что-то вроде этого:Как подключить сигналы в сложные схемы в .NET?
WaitAny (WaitAll (c1, c2), WaitAll (c3, c4)) ;
К сожалению, библиотека не поддерживает составление этих операций в более сложные деревья. Мои вопросы: (1) Есть ли способ сделать это в .NET? (2) Есть ли библиотека для этого на любом языке?
[править: Cory попросил более подробно]
Я хочу построить передачу сообщений библиотеку. Могут быть 10K небольших параллельных очередей, некоторые с сообщениями. Я хочу получить сообщение из очереди и выполнить обработчик, назначенный для очереди. Тем не менее, я не могу захватить следующее сообщение до тех пор, пока обработчик не будет выполнен (однопоточно для каждой очереди). Так что я действительно хочу ждать в очереди (получил сообщение?) И код (закончил с предыдущим сообщением?), Прежде чем появляться и выполнять следующий элемент.
Я не могу поверить, что я upvoting это тоже. :) – Tanzelax
К сожалению, это выделило бы поток для каждого поддерева в схеме. Я хочу почти 10 тыс. Из них, поэтому это не будет масштабироваться. Дизайн API затруднен, потому что, например, как бы возвращаемое значение сообщило вам, какое поддерево фактически вызвано в WaitAny? Подумайте о действительно сумасшедших глубоких деревьях сигналов. – projectshave
@projectshave: Ya нить в группе не будет масштабироваться, но вы можете создать один поток, отвечающий за 'WaitAll', с небольшими таймаутами. Все еще не масштабируемо. WaitAny возвращает индекс объекта в массиве, который вы передали, чтобы вы знали, какой сигнал был уволен. Возможно, вы можете обновить свой вопрос с помощью базовой проблемы, которую вы пытаетесь решить, и у кого-то может быть лучшее решение, чем метод WaitAny (WaitAll(), WaitAll()), который вы описываете. –