Без блокировки с использованием InterlockedCompareExchange

Я пытаюсь сделать следующий фрагмент кода без блокировки с использованием взаимосвязанных операций. Есть идеи, как это перевести?

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();
}

Есть ли какие-либо проблемы / расы в этом?

5
задан Suresh 2 May 2011 в 22:38
поделиться