Я видел некоторый повторный код (методы, если быть точным), где они входят в критический раздел, а затем с помощью InterlockedExchange ... Это имеет смысл, поскольку я думал, что эта операция была интактной атомной и не требовала такой синхронизации?InterlockedExchange (или аналогичная атомная операция) в критическом разделе?
{
EnterCricSectionLock lock (somelock);
InterlockedExchange(&somelong, static_cast<long>(newlongVal));
}
Это в основном то, что есть ...
Является ли «не» атомным? [MSDN] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms683590 (v = vs.85) .aspx): «Устанавливает 32-разрядную переменную в указанное значение как атомную операция «. Конечно, вы говорите о «всех других пользователях»: все они должны также использовать функцию блокировки. –
Атомный обмен, конечно, атомный. Я имел в виду, что нормальный обмен обычно не является атомарным. – rasmus
ОК, извините за недоразумение (но поскольку вопрос касался, в частности, 'InterlockedExchange', я не чувствую к нему плохого ;-) –