Используйте операции блокировки, вот пример кода:
LONGLONG AtomicRead(LONGLONG* p)
{
return InterlockedCompareExchange64(p, 0, 0);
}
Это делает обмен сравнением с нулем и устанавливает p равным нулю, если он уже равен нулю, т.е. InterlockedCompareExchange возвращает исходное 64-битное значение, на которое указывает p.