Блокировать текущий поток до тех пор пока выполняются одновременно несколько остальных - C#

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

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

Есть кусочек кода
            for (int i = 0; i < str1.Length - 1; i++)
            {
                int j = i;
                threadList.Add(new Thread(new ThreadStart(() => sc.Compare(str1[j], str2[j], j))));
            }
            foreach (var thr in threadList)
            {
                thr.Start();
            }
Суть. Создаётся N - количество потоков которые крутят один и тот же метод (В данном случае sc.Compare). Если для всех потоков выполнить Start всё работает отлично..Но завершается основной поток. Если добавить метод join в цикле. То на первой итерации блокируется основной поток..И в итоге выходит что этот кусок кода
            foreach (var thr in threadList)
            {
                thr.Start();
                thr.Join();
            }
работает можно так сказать в однопоточном режиме..ибо получается что на первой итерации блокируется основной поток и цикл не выполняется..Как только завершится первый поток из цикла..Вызывается второй поток. А мне нужно чтобы все потоки в цикле отработали параллельно..Но при этом чтобы основной поток был заблокирован на время выполнения всех потоков в цикле. Как решить данную проблему?

Решение задачи: «Блокировать текущий поток до тех пор пока выполняются одновременно несколько остальных»

textual
Листинг программы
for (int i = 0; i < str1.Length - 1; i++)
{
    int j = i;
    threadList.Add(new Thread(new ThreadStart(() => sc.Compare(str1[j], str2[j], j))));
    threadList[i].Start();
}
threadList.ForEach(t => t.Join());

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


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

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

11   голосов , оценка 4.091 из 5
Похожие ответы