Разница между замками, мьютексом и критическими разделами

Существует существующий вопрос о различии между разделами Mutex и Critical, но он также не касается Locks.

Итак, я хочу знать, могут ли критические разделы использоваться для синхронизации потоков между процессами.

И что подразумевается под сигнальными состояниями и несигнальными состояниями

Ответ 1

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

Ответ 2

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

CSingleLock (я предполагаю, что вы ссылаетесь на это как на блокировку, в этом контексте) является классом-оболочкой, используя RAII. Он помогает вам получить объект синхронизации потоков (в его конструкторе) и вызвать Lock and Unlock API в простой форме. (скрывая все внутренние детали, какие объекты синхронизации он использует).

CSingleLock при использовании с критическими разделами не может использоваться в процессе. Если для этой цели можно использовать Mutex.

Когда поток получает Mutex, и никакие другие потоки не могут получить Mutex, тогда состояние Mutex считается находящимся в состоянии без подписи. Если Mutex доступен и ни один нить не приобрел, он находится в состоянии Signeled.

Ответ 3

Критические разделы находятся в процессе. Именованные мьютексы могут использоваться через процессы

Lock - это общий термин, и я не знаю, какую платформу вы имеете в виду. Например, в С# примитив блокировки является критическим разделом.

Ответ 4

1) Критическая секция - это мост между User и Interlocked-operations. Он использует операции inetrlocked-exchange, чтобы блокировать и разблокировать ваши потоки. Он работает быстрее, чем мьютексы.

2) Мьютекс является ядерным объектом. Он работает не быстро, но имеет некоторые преимущества. Прежде всего, названные мьютексы могут использоваться во всех процессах. Во-вторых, если поток завершен, то мьютекс, заблокированный этим потоком, разблокируется.