В проекте, над которым я работаю, используется специальная реализация критических разделов. Способ создать критическую секцию следующим образом:Синхронизация блоков if, C++
{
CriticalSectionLock lock(m_criticalsection);
...//Stuff inside the critical section
}
Когда CriticalSectionLock
выходит из области видимости, критическая секция заканчивается.
Моя проблема заключается в том, что я хочу поставить операцию инкремента ниже внутри критической секции (я не могу использовать atomic_int
):
if (0 == g_envCount++)
{...
Я хотел бы сделать что-то вроде следующего:
{CriticalSectionLock lock(m_criticalsection);
if (0 == g_envCount++)
}
{
Но я думаю, что даже если это работает, это очень запутанным для читателя. Может ли кто-нибудь предложить лучший/более чистый способ сделать это?
Я бы использовать 'atomic_int' если это только приращение, что должно быть синхронизировано – tkausl
@tkausl К сожалению, это не вариант здесь из-за некоторых проблем платформы. Я уточню вопрос. – Adam
Но я прав, что только инкремент должен быть синхронизирован, а не весь if-блок, правильно? По крайней мере, вот что говорит ваш последний код-отрезала – tkausl