Блокировать текущий поток до тех пор пока выполняются одновременно несколько остальных - C#
Формулировка задачи:
Есть кусочек кода
Суть. Создаётся N - количество потоков которые крутят один и тот же метод (В данном случае sc.Compare).
Если для всех потоков выполнить Start всё работает отлично..Но завершается основной поток.
Если добавить метод join в цикле. То на первой итерации блокируется основной поток..И в итоге выходит
что этот кусок кода
работает можно так сказать в однопоточном режиме..ибо получается что на первой итерации блокируется основной поток и цикл не выполняется..Как только завершится первый поток из цикла..Вызывается второй поток.
А мне нужно чтобы все потоки в цикле отработали параллельно..Но при этом чтобы основной поток был заблокирован на время выполнения всех потоков в цикле. Как решить данную проблему?
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(); }
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());
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д