Итак, я вижу забавный материал, играющий с потоками.
У меня есть метод, который запускает 2 потока и продолжает его жизнь, и я попытался сделатьследующее, чтобы обеспечить безопасность.
bool CopyOk1 = false;
bool CopyOk2 = false;
new Thread(() => FirstMethod(tempList1, ref CopyOk1)).Start();
new Thread(() => SecondMethod(tempList2, ref CopyOk2)).Start();
var spinner = new SpinWait();
while (!CopyOk1 || !CopyOk2)
spinner.SpinOnce();
затем в обоих методах я начинаю со следующего
private static void FirstMethod(List<T> templist, ref bool CopyOk)
{
var temp = new T[templist.Count];
templist.CopyTo(temp);
CopyOk = true;
//moves on
}
Я собираюсь скопировать переданный список, чтобы я мог его изменить и использоватьбезопасно внутри потоков как можно скорее, чтобы разблокировать поток вызывающего.
Моя проблема заключается в том, что во втором методе непредсказуемо между инициализацией массива и списком CopyTo базовый список каким-то образом изменяется каким-то образом.
Эти списки создаются внутри потока вызывающего и фактически не используются после запуска потоков, поэтому я абсолютно НЕТ представляю, как / почему это происходит.
Без сомнения, я делаю что-то не так, но мои навыки нубизма не дают мне увидеть, любая помощь приветствуется.