Разница между блокируемым доступом к переменным и критическим сечениями

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

3 ответа

Решение

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

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

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

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

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

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

Другие вопросы по тегам