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