Я пытаюсь сделать следующий фрагмент кода без блокировки с использованием взаимосвязанных операций. Есть идеи, как это перевести?
if (m_Ref == 0xFFFF)
m_Ref = 1;
else
{
if (++m_Ref == 1)
CallSomething(); //
}
Я думал что-то вроде
if (InterlockedCompareExchange(&m_Ref, 1, 0xFFFF) != 0xFFFF))
{
if (InterlockedIncrement(&m_Ref) == 1)
CallSomething();
}
Есть ли какие-либо проблемы / расы в этом?