русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Листинг 7.4. Алгоритм Деккера


Дата добавления: 2014-11-28; просмотров: 707; Нарушение авторских прав


label 1. 2;

var перекл1. перекл2: boolean;

ОЧЕРЕДЬ : integer:

Begin перекл 1 :=faIse: перекп2:=false; ОЧЕРЕДЬ:=1: parbegin

while true do
begin перекл1:true: продолжение


220________ Глава 7. Организация параллельных взаимодействующих вычислений

Листинг 7.4 (продолжение)

1: if перекл2=true then

if 0ЧЕРЕДЬ=1 then go to 1 else begin перекл1:=false; while 0ЧЕРЕДЬ=2 do begin end end else begin

CS1 { критическая секция ПР1 } ОЧЕРЕДЬ: =2: перекл1:=false end end and while true do

begin перекл2:=1; 2: if перекл=true then

if 0ЧЕРЕДЬ=2 then go to 2 else begin перекл2:=false; while 0ЧЕРЕДЬ=1 do begin end end else begin

CS2 { критическая секция ПР2 } 0ЧЕРЕДЬ:=1; перекл2:=false end end

parend end.

Если перекл2 = true и перекл1 = false, то выполняется критическая секция процес­са ПР2 независимо от значения переменной ОЧЕРЕДЬ. Аналогично для случая пе-рекл2 = false и перекл1 = true.

Если же оба процесса хотят выполнить свои критические секции, то есть перекл2 = = true и перекл1 = true, то выполняется критическая секция того процесса, на кото­рый указывает значение переменной ОЧЕРЕДЬ, независимо от скоростей развития обоих процессов. Использование переменной ОЧЕРЕДЬ совместно с переменными перекл1 и перекл2 в алгоритме Деккера позволяет гарантированно решать пробле­му критических секций. То есть переменные перекл1 и перекл2 гарантируют, что взаимное выполнение не может иметь места; переменная ОЧЕРЕДЬ гарантирует, что не может быть взаимной блокировки, так как переменная ОЧЕРЕДЬ не меняет свое­го значения во время выполнения программы принятия решения о том, кому же сейчас проходить свою критическую секцию.

Тем не менее реализаций критических секций на основе описанного алгоритма практически не встречается из-за их чрезмерной сложности, особенно тогда, когда требуется обобщить алгоритм Деккера с двух до N процессов.



<== предыдущая лекция | следующая лекция ==>
Возможные проблемы при организации взаимного исключения при условии использования только блокировки памяти | Синхронизация процессов с помощью операции проверки и установки


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.376 сек.