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

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

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

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

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

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

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


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

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

11   голосов , оценка 4.091 из 5

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

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

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