Критическая секция

Критическая секция

Критическая секция — часть программы, в которой есть обращение к совместно используемым данным. При нахождении в критической секции двух (или более) процессов, возникает состояние «гонки» («состязания»). Для избежания данной ситуации необходимо выполнение четырех условий:

  1. Два процесса не должны одновременно находиться в критических областях.
  2. В программе не должно быть предположений о скорости или количестве процессоров.
  3. Процесс, находящийся вне критической области, не может блокировать другие процессы.
  4. Невозможна ситуация, в которой процесс вечно ждет попадания в критическую область.

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

Между мьютексом и критической секцией есть терминологические различия, так процедура, аналогичная захвату мьютекса, называется входом в критическую секцию (англ. enter), снятию блокировки мьютекса — выходом из критической секции (англ. leave).

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

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

Критические секции Windows имеют оптимизацию, заключающуюся в использовании атомарно изменяемой переменной наряду с объектом «событие синхронизации» ядра. Захват критической секции означает атомарное увеличение переменной на 1. Переход к ожиданию на событии ядра осуществляется только в случае, если значение переменной до захвата было уже больше 1, то есть происходит реальное «соревнование» двух или более потоков за ресурс.

Таким образом, при отсутствии соревнования захват/освобождение критической секции обходятся без обращений к ядру.

Кроме того, захват уже занятой критической секции до обращения к ядру какое-то небольшое время (англ. spin count) ждёт в цикле опроса переменной, и, если переменная становится равной 0, то захват происходит без обращений к ядру.

Сходный объект в ядре Windows называется FAST_MUTEX (ExAcquire/ReleaseFastMutex). Он отличается от критической секции отсутствием поддержки рекурсивного повторного захвата тем же потоком.

Аналогичный объект в Linux называется фьютекс.

См. также

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать реферат

Полезное


Смотреть что такое "Критическая секция" в других словарях:

  • критическая секция — Часть асинхронной процедуры, которая не может выполняться параллельно с определенной частью той же или другой асинхронной процедуры. [ГОСТ 28397 89] Тематики языки программирования EN critical section …   Справочник технического переводчика

  • Критическая секция — 45. Критическая секция Critical section Часть асинхронной процедуры, которая не может выполняться параллельно с определенной частью той же или другой асинхронной процедуры Источник: ГОСТ 28397 89: Языки программирования. Термины и определения… …   Словарь-справочник терминов нормативно-технической документации

  • Многопоточность — Не следует путать с Поток данных. Не следует путать с Поток выполнения (для процессора). Многопоточность  свойство платформы (например, операционной системы, виртуальной машины и т. д.) или приложения, состоящее в том, что процесс …   Википедия

  • Семафор (информатика) — У этого термина существуют и другие значения, см. Семафор. Семафор  объект, позволяющий войти в заданный участок кода не более чем n потокам. Определение введено Эдсгером Дейкстрой. Семафоры используются при передаче данных через разделяемую …   Википедия

  • Мьютекс — (англ. mutex, от mutual exclusion  «взаимное исключение»)  одноместный семафор, служащий в программировании для синхронизации одновременно выполняющихся потоков. Мьютексы  это один из вариантов семафорных механизмов для… …   Википедия

  • Алгоритм Деккера — первое известное корректное решение проблемы взаимного исключения в конкурентном программировании. Эдсгер Дейкстра ссылается на голландского математика Т. Деккера как на автора данного алгоритма в своей работе о межпроцессном взаимодействии[1].… …   Википедия

  • критический участок — критический интервал критическая секция — [Л.Г.Суменко. Англо русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.] Тематики информационные технологии в целом Синонимы критический интервалкритическая секция EN critical section …   Справочник технического переводчика

  • ГОСТ 28397-89: Языки программирования. Термины и определения — Терминология ГОСТ 28397 89: Языки программирования. Термины и определения оригинал документа: 38. Автоматическое распределение памяти Automatic storage allocation Выделение памяти при входе в программный блок для локальных переменных и ее… …   Словарь-справочник терминов нормативно-технической документации

  • Сигналы (UNIX) — У этого термина существуют и другие значения, см. Сигнал (значения). Сигналы в UNIX, Unix подобных и других POSIX совместимых операционных системах являются одним из способов взаимодействия между процессами (англ. IPC, inter process… …   Википедия

  • Параллелизм (программа) — Не следует путать с термином «Поток данных». Многопоточность свойство платформы (например, операционной системы, JVM и т. д.) или приложения, состоящее в том, что процесс, порождённый в операционной системе, может состоять из нескольких потоков,… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»