Чтения на x86 по своей природе являются атомарными, если они выровнены, в разделе под инструкцией MOV
в руководствах по сборке Intel vol 2A следует упомянуть это, также как и с префиксом LOCK
. Другие тома могут также упомянуть об этом
однако, если вы хотите atomic read
, вы можете использовать _InterlockedExchangeAdd((LONG*)&var,0)
aka LOCK XADD
, это приведет к старому значению, но не изменит его значение, то же самое можно сделать с InterlockCompareExchange((LONG*)&var,var,var)
aka LOCK CMPXCHG
, но ИМО, в этом нет необходимости