Различие между блокировками, взаимным исключением и критическими разделами

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

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

Также, что предназначено по сообщенным состояниям и несообщенным состояниям

12
задан ckv 11 May 2010 в 06:55
поделиться

4 ответа

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

7
ответ дан 2 December 2019 в 21:02
поделиться

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

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

CSingleLock, когда используется с критическими секциями, не может быть использован между процессами. Для этой цели можно использовать Mutex.

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

3
ответ дан 2 December 2019 в 21:02
поделиться

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

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

2
ответ дан 2 December 2019 в 21:02
поделиться

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

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

2
ответ дан 2 December 2019 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: