Я создаю два потока и передаю функцию, которая выполняет алгоритм, показанный ниже 10 000 000 раз. В основном он пишет "5" в консоли, а иногда пишет "3" или "4". Это совершенно очевидно, почему это похоже. Но здесь возникает запутанная часть: зачем она пишет "6" в консоли?
class Program
{
private static int _state = 3;
static void Main(string[] args)
{
Thread firstThread = new Thread(Tr);
Thread secondThread = new Thread(Tr);
firstThread.Start();
secondThread.Start();
firstThread.Join();
secondThread.Join();
Console.ReadLine();
}
private static void Tr()
{
for (int i = 0; i < 10000000; i++)
{
if (_state == 3)
{
_state++;
if (_state != 4)
{
Console.Write(_state);
}
_state = 3;
}
}
}
}