Ответ 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).