Пользовательский многопоточный цикл - PullRequest
2 голосов
/ 11 июня 2009

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

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

Спасибо

Ответы [ 3 ]

3 голосов
/ 11 июня 2009

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

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

0 голосов
/ 11 июня 2009

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

0 голосов
/ 11 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...