У меня есть приложение с некоторой рекурсивной функции, которая в целом выглядит следующим образом:Создание потока внутри рекурсивной функции
threads = 0;
Algorithm(array) {
//some code...
newArray1 = array.Take(array.Length/2).ToArray();
newArray2 = array.Skip(array.Length/2).ToArray();
ThreadStart start1 = delegate
{
Algorithm(newArray1);
};
Thread thread1 = new Thread(start1);
ThreadStart start2 = delegate
{
Algorithm(newArray2);
};
Thread thread2 = new Thread(start2);
thread1.Start();
threads++;
thread2.Start();
threads++;
}
Это не имеет значения, насколько глубоко эта рекурсия идет, переменная нити всегда равна 2. Зачем?
Поскольку оба потока имеют одну и ту же переменную 'threads' – user3185569
@ user3185569, поэтому область не имеет значения для потоков? – WhilseySoon
Вы не устанавливаете общую переменную как [раздел взаимного исключения] (https://en.wikipedia.org/wiki/Mutual_exclusion). Это может привести к некоторому решению проблемы несоответствия, так как хорошая практика должна быть в разделе взаимного исключения. И когда вы ждете/присоединяетесь к ним, чтобы синхронизировать его? – Raskayu