Пользовательский многопоточный цикл

2

Я изучаю использование шаблона Threader производителя \consumer для запуска списка строк, которые я извлекаю из базы данных, а затем я запускаю команды powershell. Поскольку команды powershell могут быть довольно интенсивными, я хочу только создать 3 потока за один раз, а затем дождаться завершения одного потока до его завершения. Я заглянул в Трэдпул, но похоже, что он используется для более легкой обработки.

Я новичок в потоковом режиме и видел несколько примеров производителей\потребителей в Интернете, но я не уверен, как обращаться с 3-мя циклами потока с использованием waithandles (если это так, как это сделать). Я думаю, что мне нужно использовать waithandle.waitany для достижения вышеуказанного, но я не уверен, как это реализовать. Если бы кто-то мог указать мне в правильном направлении, я был бы очень благодарен

Спасибо

Теги:
multithreading

3 ответа

3
Лучший ответ

Используйте очередь, в которой вы добавляете рабочие элементы. Затем создайте столько потоков, сколько вы хотите запустить одновременно, и попросите их запустить цикл, пытаясь получить элементы из очереди рабочих элементов (убедитесь, что это происходит правильно синхронизированным образом).

Если очередь заполняется до начала обработки, вы можете использовать пустую очередь как условие для завершения цикла в потоке. В этом случае вы можете дождаться остановки всех потоков, чтобы вы знали, когда все элементы завершили обработку.

0

Проверьте библиотеки CCR/DSS для .Net:
http://msdn.microsoft.com/en-us/library/bb648752.aspx
http://www.microsoft.com/ccrdss/

0

Если вы можете использовать .NET 4.0, вы можете исследовать с помощью класса Task и экземпляра TaskScheduler с ограниченным набором MaximumConcurrencyLevel.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню