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

Цели и средства синхронизации

Синхронизация процессов и потоков

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

Потребность в синхронизации потоков возникает только в мультипрограммной операционной системе и связана с совместным использованием аппаратных и информационных ресурсов вычислительной системы.

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

Любое взаимодействие процессов или потоков связано с их синхронизацией, которая заключается в согласовании их скоростей путем приостановки потока до наступления некоторого события и последующей его активизации при наступлении этого события.

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

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

Важным понятием синхронизации потоков является понятие «критической секции» программы. Критическая секция - часть программы, результат выполнения которой может непредсказуемо меняться, если общие данные изменяются другими потоками в то время, когда выполнение этой части еще не завершено. Критическая секция всегда определяется по отношению к определенным критическим данным, при несогласованном изменении которых могут возникнуть нежелательные эффекты. Во всех потоках, работающих с критическими данными, должна быть определена критическая секция. В разных потоках критическая секция состоит в общем случае из разных последовательностей команд.

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

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: