Разница между Мьютекс, Семафор и Спин Блокировка

Я делаю эксперименты с IPC, особенно с Mutex, Semaphore и Spin Lock. Я узнал, что Mutex используется для асинхронного блокирования (со сном (в соответствии с теориями, которые я читаю в NET)) Механизм, семафор - это механизм синхронного блокирования (с сигналом и спящим), а запирающие блоки - синхронный, но не спальный механизм.

Может кто-нибудь помочь мне прояснить эти вещи глубоко? И еще одно сомнение касается Mutex, когда я написал программу с потоком и мьютексом, в то время как один поток запускает другой поток, не находится в состоянии сна, но он постоянно пытается получить Lock. Итак, Mutex спал или не спал???

Ответ 1

Во-первых, запомните цель этих "синхронизирующих объектов" :

Эти объекты были предназначены для обеспечения эффективного и когерентного использования 'общих данных между более 1 потока strong > среди одного процесса или из разных процессов.

Эти объекты могут быть 'получены' или 'выпущены.

Вот и все!!! Конец истории!!!

Теперь, если это поможет вам, позвольте мне положить мое зерно песка:

1) Критический раздел= Пользовательский объект, используемый для разрешения всего одного активного потока из многих других внутри одного процесса. Другие не выбранные потоки помещаются в сон.

[Нет возможности межпроцессного взаимодействия, очень примитивный объект].

2) Mutex Semaphore (aka Mutex)= объект ядра, используемый для разрешения всего одного активного потока из многих других, внутри одного процесса strong > или среди разных процессов. Другие не выбранные потоки помещаются в сон. Этот объект поддерживает привязку потоков, уведомление о прекращении потока, рекурсию (множественные "приобретать" вызовы из одного потока) и "предотвращение инверсии приоритета".

[Возможность межпроцессного взаимодействия, очень безопасный для использования, своего рода объект синхронизации "высокого уровня".

3) Подсчет Семафора (также известный как Семафор)= Объект ядра, используемый для разрешения группы активных потоков из многих других, внутри одного процесса или среди разных процессов. Другие не выбранные потоки помещаются в сон.

[Межпроцессные возможности, однако, не очень безопасны в использовании, поскольку в нем отсутствуют следующие атрибуты "mutex": уведомление о прекращении потока, рекурсия?, "предотвращение инверсии приоритета" и т.д.].

4) И теперь, говоря о "спинлоках", сначала определите:

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

Lock = переменная, значение которой разрешает или запрещает вход в "критическую область". (Он может быть реализован как простой "логический флаг" ).

Ожидание занятости = Постоянное тестирование переменной до появления некоторого значения.

Наконец:

Spin-lock (aka Spinlock)= A блокировка, которая использует ожидание ожидания. (Приобретение блокировки производится с помощью xchg или аналогичных атомных операций).

[Нет нить спать, в основном используется только на уровне ядра. Ineffcient для кода уровня пользователя].

Как последний комментарий, я не уверен, но я могу поспорить вам некоторые большие деньги, что вышеупомянутые первые три синхронизирующих объекта (# 1, # 2 и # 3) используют этот простой зверь (# 4) как часть их реализации.

Иметь хороший день!

Литература:

- Реальные понятия времени для встроенных систем Цин Ли с Кэролайн Яо (книги CMP).

-Современные операционные системы (3-е) Эндрю Таненбаума (Pearson Education International).

-Программирование приложений для Microsoft Windows (4-е) Джеффри Рихтера (Microsoft Programming Series).

Ответ 2

Вот отличное объяснение разницы между семафорами и мьютексами:

http://blog.feabhas.com/2009/09/mutex-vs-semaphores- --part-1-semaphores/

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