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

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

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

Здравствуйте. Допустим, у нас есть массив из 1000 элементов и n потоков, которые должны обработать этот массив, но каждый поток должен обработать только один элемент массива, т.е. 1-ый поток обработал 1-ый элемент, 2-ой поток обработал 2-ой, ... , n-ый поток обработал n-ый элемент и т.д, пока не будут обработана вся эта тысяча элементов. В Java есть замечательный ExecutorService, который как раз подошел бы под мои нужды. Погуглил, нашел что-то похожее - ThreadPool. Попробовал
       
        static int iterat = 0;
        static int iter = 0;
        static object workerLocker = new object();
 
        static void Main(string[] args)
        {
            iterat = list.Count;
            for (int i = 0; i < iterat; i++)
            {
                ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc));
                ThreadPool.SetMinThreads(10, 10);
                ThreadPool.SetMaxThreads(10, 10);
            }
            lock (workerLocker)
                while (iter < iterat)
                    Monitor.Wait(workerLocker);
        }
 
        static void ThreadProc(Object stateInfo)
        {
            lock (workerLocker)
            {
                if (iter < list.Count)
                {
                    string str = list[iter];
                    if (str != "")
                    {
                         Console.WriteLine(str);    
                    }
                }
                iter++;
                Monitor.Pulse(workerLocker);
            }
 
        }
            
        }
и как-то не удачно. Получается, что локер будет позволять обрабатывать массив только одному потоку, что вроде как не является многопоточностью. Знатоки, как быть? Заранее благодарен.

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

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

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


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

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

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