Блокировка (вычисление)
В вычислительной технике некоторого заблокированный процесс ожидает доступности события , например, ресурса или завершения операции ввода-вывода . [1] Как только происходит событие, которого ожидает процесс («блокируется»), процесс переходит из блокировки состояния в неизбежное состояние, например, в состояние runnable .
В многозадачной компьютерной системе отдельные задачи или потоки выполнения должны совместно использовать ресурсы системы. К общим ресурсам относятся: ЦП, сеть и сетевые интерфейсы, память и диск.
Когда одна задача использует ресурс, обычно невозможно или нежелательно, чтобы другая задача имела к нему доступ. методы взаимного исключения Для предотвращения такого одновременного использования используются . Когда другая задача заблокирована, она не может быть выполнена до тех пор, пока первая задача не завершит использование общего ресурса.
Языки программирования и алгоритмы планирования разработаны так, чтобы минимизировать общий эффект блокировки. Блокируемый процесс может помешать выполнению локальных рабочих задач. В этом случае «блокировка» часто рассматривается как нежелательная. [2] Однако вместо этого такие рабочие задачи могут быть назначены независимым процессам, где остановка одного практически не влияет на другие, поскольку планирование будет продолжаться. Примером является «блокировка на канале », где пассивное ожидание другой части (т. е. отсутствие опроса или цикла вращения ) является частью семантики каналов. [3] При правильном проектировании любой из них может быть использован для реализации реактивных систем. [ нужны разъяснения ]
Тупик означает, что процессы патологически ждут друг друга по кругу. Как таковое это не связано напрямую с блокировкой.
См. также
[ редактировать ]- Параллельные вычисления
- Зависимость данных
- Неблокирующий алгоритм
- Состояние гонки
- Планирование (вычисления)
Ссылки
[ редактировать ]- ^ Столлингс, Уильям (2004). Операционные системы: внутреннее устройство и принципы проектирования (5-е изд.). Прентис Холл. ISBN 978-0131479548 .
- ^ C++ и далее 2012: Херб Саттер - Параллелизм C++
- ^ Роб Пайк (2 июля 2012 г.). Шаблоны параллелизма Go . Google I/O 2012. Google для разработчиков.