У меня есть следующий код (написанный на c #, но его можно легко перевести на ваш предпочитаемый язык ...)
class Program
{
static int sharedState = 0;
static void Main(string[] args)
{
Thread t1 = new Thread(UpdateState);
Thread t2 = new Thread(UpdateState);
t1.Start();
t2.Start();
t1.Join();
t2.Join();
Console.WriteLine("sharedState value is {0}.", sharedState);
}
static void UpdateState()
{
for (int i = 0; i < 10; i++)
sharedState++;
}
}
Как вы можете догадаться, этот код создает два рабочих потока, которые увеличиваютзначение общего состояния по одному на 10 раз.Код не имеет никакого механизма синхронизации (такого как мьютекс, монитор или любой другой ...) при доступе и записи общего значения «sharedState», и основной поток ожидает, когда два рабочих закончат свою работу (Join).Может ли кто-нибудь объяснить мне, в чем проблема с этим кодом, и возможно ли, что в конце значение 'sharedState' будет равно 2?(моему другу был задан этот вопрос, и они сказали ему, что это возможно, и мы оба не можем понять, как ...) Кстати, когда я запускаю этот код, я каждый раз получаю 20 ...