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

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

ФИЛi = (i.садится i.берет вил.i i.берет вил.(i +5 1)

i.кладет вил.i i.кладет вил.(i +5 1) → i.встаёт ФИЛi).

Вилку циклически берёт и кладёт на место кто-нибудь из соседних с ней философов:

ВИЛКАi = (i.берет вил.i, i.кладёт вил.i ВИЛКАi | (i -5 1).берет вил.i

(i -5 1).кладёт вил.i ВИЛКАi).

Поведение всего пансиона можно описать как параллельную комбинацию поведения компонент:

ФИЛОСОФЫ = (ФИЛ0 || ФИЛ1 || ФИЛ2 || ФИЛ3 || ФИЛ4 )

ВИЛКИ = (ВИЛКА0 || ВИЛКА1 || ВИЛКА2 || ВИЛКА3 || ВИЛКА4 )

ПАНСИОН = (ФИЛОСОФЫ || ВИЛКИ).

В одном из интересных вариантов этой историй философы могут брать и класть обе вилки в любом порядке. Рассмотрим поведение каждой руки философа в отдельности.

aЛЕВАЯi = {i.садится, i.встаёт, i.берет вил.i, i.кладёт вил.i}.

aФИЛi = {i.садится, i.встаёт, i.берет вил.(i +5 1), i.кладёт вил.(i +5 1)}.

ЛЕВАЯi = (i.садится i.берет вил.i i.кладет вил.i i.встаёт ЛЕВАЯi).

ПРАВАЯi = (i.садится i.берет вил.(i +5 1) i.кладет вил.(i +5 1)

i.встаёт ПРАВАЯi).

ФИЛi = (ЛЕВАЯi || ПРАВАЯi ).

Синхронизацией процессов ЛЕВАЯi и ПРАВАЯi в момент, когда i-тый философ садится или встаёт, достигается то, что он не может поднять вилку, если не сидит за столом, и не может встать из-за стола, пока не положит вилку. Помимо этого, операции с обеими вилками произвольно чередуются.

Тупик!

Построенная математическая модель позволяет обнаружить опасность возникновения тупиковой ситуации, когда каждый из философов, сев за стол, возьмёт вилку в левую руку и потянется за второй – которой уже нет на месте. Несмотря на то, что каждый из участников способен к дальнейшим действиям, ни одна пара участников не в состоянии договориться о том, какое действие совершить следующим.

Одним из решений этой проблемы явилось введение в систему слуги. Слуге даётся указание следить за тем, чтобы за столом никогда не оказывалось больше четырех философов одновременно. Алфавит его определяется как C B, где

C = {0.садится, … , 4.садится }, B = {0.встаёт, … , 4.встаёт}.

Поведение слуги проще всего описать с помощью взаимной рекурсии. Пусть СЛУГАj определяет поведение слуги, когда за столом сидят jфилософов:

СЛУГА0 =(x: C СЛУГА1),

СЛУГАj =(x: C СЛУГАj+1) | y: B СЛУГАj-1), для j {1,2.3}.

СЛУГА4 =(y: B СЛУГА3).

Пансион, свободный от тупика, определяется как

НОВПАНСИОН = ((ПАНСИОН || СЛУГА0).








Дата добавления: 2015-07-18; просмотров: 629;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.