Два процесса происходят одновременно.
Хитрость в том, что, поскольку нет ничего действительно синхронизирующего две программы, что-то может произойти между строками. В то же время, возможно, что вещи происходят одновременно.
Чтобы увидеть, как это может быть проблемой, подумайте об этой ситуации ...
Что бы произошло, если бы первый флаг [0] = true и первый флаг [1] = true произошли на P0 / P1 в одно и то же время?
И процесс 1, и процесс 2 застряли бы в цикле while. Как бы они вышли из цикла while? Один процесс должен будет проверить while (flag [other]) в тот же момент, а другой процесс установит их flag [me] в true. Это очень узкий промежуток времени. Это эквивалент броска игральных костей снова и снова и не продолжается до тех пор, пока вы не наберете определенное число.
Вот почему нам нужно что-то более высокого уровня, чтобы справиться с синхронизацией для нас - реальные блокировки и тому подобное.
править: О, еще одна вещь. Вы можете проверить, являются ли операции чтения / записи потокобезопасными. Что произойдет, если система попытается записать бит одновременно с чтением?
edit2: FYI - http://msdn.microsoft.com/en-us/library/aa645755(v=VS.71).aspx