Разница между блокируемым доступом к переменным и критическим сечениями - PullRequest
4 голосов
/ 24 июня 2011

Может ли кто-нибудь помочь объяснить разницу между блокированным доступом к переменным И критическим разделом, инкрементным шагом в c ++? спасибо, очень признателен, заранее.

Ответы [ 3 ]

8 голосов
/ 24 июня 2011

По сути, все эти InterlockedXXX функции являются более или менее встроенными функциями, которые сопоставляются с относительно небольшим количеством (обычно одной) инструкций по сборке.Такая операция не может быть прервана и поэтому считается атомарной (атомарность достигается на уровне процессора, по крайней мере, если это возможно на целевой платформе).

A CRITICAL_SECTION - это примитив синхронизации, который может защищать более длинные секции.Он действительно блокирует, и конкурирующие потоки будут вынуждены ждать, пока поток не освободит владельца критической секции.

Критические секции являются примитивами ОС, но они ограничены одним процессом.Их старший брат критической секции под Windows - Mutex, который можно использовать для межпроцессной синхронизации.

Используйте функции InterlockedXXX, если можете (например, нет смысла использоватьполный критический участок объекта для защиты одного счетчика).Возможно, вы захотите взглянуть на различные прототипы и их использование заранее.Многие люди используют критические секции, где InterlockedCompareExchange будет делать ...

3 голосов
/ 24 июня 2011

По сути, функции блокировки имеют ту же концепцию, что и критическая секция, но они реализованы аппаратно для определенных операций - блокировка, работа, разблокировка.Это может сделать их намного быстрее, но ограничивает их применимость.Критические разделы гораздо более общие, но относительная стоимость их использования выше.У них также есть проблемы, такие как условия гонки и тупики.

3 голосов
/ 24 июня 2011

Критическая секция - это замок.Вызов функции InterlockedXxx является атомарной операцией - без блокировки.Вы можете построить либо с точки зрения другого, но на практике они имеют очень разные характеристики производительности (блокированные функции обычно быстрее).

...