По сути, все эти InterlockedXXX
функции являются более или менее встроенными функциями, которые сопоставляются с относительно небольшим количеством (обычно одной) инструкций по сборке.Такая операция не может быть прервана и поэтому считается атомарной (атомарность достигается на уровне процессора, по крайней мере, если это возможно на целевой платформе).
A CRITICAL_SECTION
- это примитив синхронизации, который может защищать более длинные секции.Он действительно блокирует, и конкурирующие потоки будут вынуждены ждать, пока поток не освободит владельца критической секции.
Критические секции являются примитивами ОС, но они ограничены одним процессом.Их старший брат критической секции под Windows - Mutex
, который можно использовать для межпроцессной синхронизации.
Используйте функции InterlockedXXX
, если можете (например, нет смысла использоватьполный критический участок объекта для защиты одного счетчика).Возможно, вы захотите взглянуть на различные прототипы и их использование заранее.Многие люди используют критические секции, где InterlockedCompareExchange
будет делать ...