302
правки
Изменения
Нет описания правки
Проблема, с которой связаны взаимные исключения, является проблемой совместного использования ресурсов: как можно управлять доступом нескольких процессов к общему ресурсу, когда каждый процесс нуждается в исключительном контроле над этим ресурсом при выполнении своей работы? Решение — делать доступным общий ресурс только тогда, когда процесс находится в определенном сегменте кода, называемом критической секцией. И контролировать доступ к общему ресурсу, контролируя каждое взаимное выполнение той части программы, в которой будет использоваться ресурс.
Успешное решение этой проблемы должно иметь по крайней мере два три свойства:;условие корректности
#Взаимное исключение: только один поток может быть в критической секции.
;условия прогресса
#Отсутствие взаимоблокировок (англ. ''deadlocks''): если несколько потоков пытаются войти в критическую секцию, то хотя бы один из них должен войти в критическую секцию за конечное время.
#Отсутствие голодания (англ. ''starvation-freedom''): если какой-то поток пытается войти в критическую секцию, то он войдет в критическую секцию за конечное время.
Каждая программа может быть разделена на четыре секции, что приводит к четырем состояниям. [[Файл: State_graph2.png|thumb|right|Порядок перехода между состояниями]]
==Алгоритмы взаимного исключения==
===<tex>1</tex> примерАлгоритм Лампорта======Алгоритм Лампорта======Алгоритм Лампорта===
==См. также==
* [[Производящая функцияАлгоритм_Лампорта_взаимного_исключения]]
== Источники информации ==
* [httphttps://wwwen.genfuncwikipedia.ruorg/theorywiki/rsol/ Решение рекуррентных соотношенийMutual_exclusion Mutual exclusion]
[[Категория: Параллельное программирование]]