И еще... По видимому, даже InterlockedAnd, InterlockedOr не спасут от такой проблемы. Ведь, InterlockedAnd гарантирует вроде, только, что операция "чтения + AND + присваивание" выполнятся без переключения потоков. Ну выполнились и что? Если значение в кэше процессора и второй поток выполняется на другом процессоре, то он не увидит изменений, и затрет изменения 1-го потока. Вообще непонятно, как синхронизировать потоки на многопроцессорных машинах, если не запрещать кэшировать в CPU общие для потоков участки памяти.