Я не могу использовать атомы C ++ 11 здесь
У меня есть сомнения относительно моего использования InterlockedCompareExchange()
для «атомарного» чтения переменной.
Я задал вопрос об этом здесь , но то, что я делал там, было другим. Параметры «exchange» и «comperand» (2-й и 3-й) были «жестко запрограммированными» значениями, т.е. не считывались из переменной.
Пожалуйста, примите во внимание это:
// Copy the connect time
DWORD dwConnectTime = InterlockedCompareExchange(&msgInfo.m_dwConnectTime,
msgInfo.m_dwConnectTime,
msgInfo.m_dwConnectTime);
Это предназначено для замены значения msgInfo.m_dwConnectTime
на текущее значение msgInfo.m_dwConnectTime
, при условии, что текущее значение msgInfo.m_dwConnectTime
равно msgInfo.m_dwConnectTime
. Затем возвращается предыдущее значение msgInfo.m_dwConnectTime
, , на которое я полагаюсь, чтобы «скопировать» значение .
Меня только что осенило, что показания msgInfo.m_dwConnectTime
для второго и третьего параметров сами по себе не гарантируют, что они будут атомарными. Таким образом, этот код неверен, следовательно, мне нужно использовать блокирующий примитив для копирования msgInfo.m_dwConnectTime
?