Изменения

Перейти к: навигация, поиск

Алгоритмы взаимного исключения

687 байт добавлено, 16:07, 29 сентября 2018
Проблема
Успешное решение этой проблемы должно иметь по крайней мере три свойства:
;условие Условие корректности:#'''Взаимное исключение ''' (англ. ''mutual exclusion''): только один поток может быть в критической секции.;условия Условия прогресса:#'''Отсутствие взаимоблокировок ''' (англ. ''deadlocks''): если несколько потоков пытаются войти в критическую секцию, то хотя бы один из них должен войти в критическую секцию за конечное время.#'''Отсутствие голодания ''' (англ. ''starvation-freedom''): если какой-то поток пытается войти в критическую секцию, то он войдет в критическую секцию за конечное время. Может быть последовательно усиленно, превращаясь в условие честности (англ. ''fairness'').##*Квадратичное ожидание (англ. ''quadratic wait'') — <tex>O(n^2)</tex> операций.##*Линейное ожидание (англ. ''linear wait'') — <tex>O(n)</tex> операций.##*Первый пришел, первый обслужен (англ. ''first come first served'')  Требование <tex>First Come First Served (FCFS)</tex> формализуется так:#Метод <tex>lock</tex> должен состоять из двух последовательных секций. '''def''' lock(): '''doorway''' '''waitnig'''#Секция <tex>doorway</tex> должны быть <tex>wait free</tex>, то есть выполняться за конечное число шагов, независимо от других потоков.#Секция <tex>waiting</tex> должна выполнять условие: Если <tex>DW_i \Rightarrow DW_j</tex>, то <tex>res(WT_i) \Rightarrow res(WT_j)</tex>. 
Каждая программа может быть разделена на четыре секции, что приводит к четырем состояниям. [[Файл: State_graph2.png|thumb|right|Порядок перехода между состояниями]]
302
правки

Навигация