Рубрики

Критический раздел в синхронизации

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

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

Доступ к такой общей переменной (разделяемая память, общие файлы, общий порт и т. Д.) Должен быть синхронизирован. Немногие языки программирования имеют встроенную поддержку синхронизации.

Очень важно понимать важность состояния гонки при написании программирования режима ядра (драйвер устройства, поток ядра и т. Д.). поскольку программист может напрямую получать доступ и изменять структуры данных ядра.

Простое решение критического раздела можно представить, как показано ниже,

acquireLock();
Process Critical Section
releaseLock();

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

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Критический раздел в синхронизации

0.00 (0%) 0 votes