Пул потоков - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Допустим, у нас есть массив из 1000 элементов и n потоков, которые должны обработать этот массив, но каждый поток должен обработать только один элемент массива, т.е. 1-ый поток обработал 1-ый элемент, 2-ой поток обработал 2-ой, ... , n-ый поток обработал n-ый элемент и т.д, пока не будут обработана вся эта тысяча элементов. В Java есть замечательный ExecutorService, который как раз подошел бы под мои нужды. Погуглил, нашел что-то похожее - ThreadPool. Попробовал
Листинг программы
  1. static int iterat = 0;
  2. static int iter = 0;
  3. static object workerLocker = new object();
  4. static void Main(string[] args)
  5. {
  6. iterat = list.Count;
  7. for (int i = 0; i < iterat; i++)
  8. {
  9. ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc));
  10. ThreadPool.SetMinThreads(10, 10);
  11. ThreadPool.SetMaxThreads(10, 10);
  12. }
  13. lock (workerLocker)
  14. while (iter < iterat)
  15. Monitor.Wait(workerLocker);
  16. }
  17. static void ThreadProc(Object stateInfo)
  18. {
  19. lock (workerLocker)
  20. {
  21. if (iter < list.Count)
  22. {
  23. string str = list[iter];
  24. if (str != "")
  25. {
  26. Console.WriteLine(str);
  27. }
  28. }
  29. iter++;
  30. Monitor.Pulse(workerLocker);
  31. }
  32. }
  33. }
и как-то не удачно. Получается, что локер будет позволять обрабатывать массив только одному потоку, что вроде как не является многопоточностью. Знатоки, как быть? Заранее благодарен.

Решение задачи: «Пул потоков»

textual
Листинг программы
  1.         static void ThreadProc(Object stateInfo)
  2.         {
  3.             string str = (string)stateInfo;
  4.             if (str != "")
  5.             {
  6.                Console.WriteLine(str);    
  7.              }
  8.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут