Кіріспе
Компьютер ғылымында, тамақтанушы философтар мәселесі – синхрондау мәселелерін және оларды шешу тәсілдерін көрсету үшін бір мезгілдегі алгоритмдерді жобалауда жиі қолданылатын мысал. Бұл мәселені алғаш 1965 жылы Эдсгер Дейкстра студенттік емтихан тапсырмасы ретінде ұсынған, онда таспалық жетекке қол жеткізу үшін бәсекелесетін компьютерлер қарастырылған. Біраз уақыттан кейін Тони Хоэр мәселені қазіргі түріне жетілдірді.
In computer science, the dining philosophers problem is an example problem often used in concurrent algorithm design to illustrate synchronization issues and techniques for resolving them. It was originally formulated in 1965 by Edsger Dijkstra as a student exam exercise, presented in terms of computers competing for access to tape drive peripherals. Soon after, Tony Hoare gave the problem its present form.
Мәселе туралы мәлімдеме
Бес философ бір үстелдің ар жағында тамақтанады. Әр философтың үстелінде жеке табағы бар. Әр табақтың арасында шанышқы бар. Тағам – екі шанышқымен жеуге болатын спагетти. Әр философ тек кезекпен ойлану мен тамақтануға қабілетті. Сонымен қатар, философ спагеттиді тек сол және оң шанышқылары болғанда ғана жей алады. Осылайша, екі шанышқы тек оның ең жақын көршілері тамақ ішпей, ойланып отырғанда ғана қолжетімді болады. Философ тамақтанып болған соң, екі шанышқыны да қояды. Мәселе – ешбір философ аш қалмауы үшін қандай тәртіп (параллель алгоритм) құру керек; яғни, әрқайсысы тамақтану мен ойлауды кезектестіре беруі керек, егер философтар басқаларының қашан тамақтануды немесе ойлауды қалатынын біле алмайды (толық емес ақпарат мәселесі).
Төреші шешімі
Тағы бір тәсіл – философ екі шанышқыны да бірдей немесе ешқайсысын да алып алмауына кепілдік беру, мысалы, төреші. Шанышқыларды алу үшін философ төрешінің рұқсатын сұрауы керек. Төреші бір уақытта бір ғана философқа екі шанышқысын алып бітіргенше рұқсат береді. Шанышқыны қоюға әрқашан рұқсат етіледі. Төрешіні мутекс ретінде іске асыруға болады. Жаңа орталық тұлғаны (төрешіні) енгізуден басқа, бұл тәсіл параллелизмді азайтуы мүмкін: егер философ тамақтанып отырса және оның көршілерінің бірі шанышқы сұраса, басқа барлық философтар бұл сұраныс орындалғанша күтуі керек, тіпті олар үшін шанышқылар әлі де қолжетімді болса да.
Дастарқандағы қонақтардың санын шектеу
Уильям Сталлингс ұсынған шешім – кез келген уақытта ең көп дегенде n-1 философтың отыруына рұқсат ету. Соңғы философ біреу тамақтануын аяқтағанша күтуі керек (мысалы, семафорды пайдаланып), содан кейін ол "отырып", кез келген шанышқыға қол жеткізуге рұқсат сұрайды. Бұл кем дегенде бір философтың әрқашан екі шанышқыны да алып, жүйенің алға жылжуын қамтамасыз етеді.
Чанди/Мисра ерітіндісі
1984 жылы К. Мани Чанди мен Дж. Мисра Дикстраның шешімінен өзгеше, кез келген агенттерге (P1, …, Pn нөмірленген) кез келген ресурстар саны үшін таласуға мүмкіндік беру үшін «тамақтанатын философтар» мәселесіне басқаша шешім ұсынды. Бұл шешім толыққанды түрде бөлінген және бастапқы орнатудан кейін орталық билік қажет етпейді. Дегенмен, ол «философтар бір-бірімен сөйлеспеуі керек» деген талапты бұзады (өтініш хабарламаларының арқасында). Ресурстың иесі болуға таласып жатқан әр философ жұбы үшін, шанышқы жасап, оны кішірек ID-сі бар философқа (агент Pn үшін n) беріңіз. Әр шанышқы «кір» немесе «таза» болуы мүмкін. Бастапқыда, барлық шанышқылар кір. Философ ресурстар жиынтығын пайдаланғысы келгенде (яғни, жегісі келгенде), ол өзінің бәсекелес көршілерінен шанышқыларды алуы керек. Философтың жоқ шанышқылары үшін ол сұрау хабарлама жібереді. Шанышқысы бар философ сұрау хабарлама алса, ол шанышқы таза болса, сақтап алады, ал кір болса, қайтарады. Философ шанышқыны қайтарса, жібермес бұрын оны тазалайды. Философ жеп болғаннан кейін, оның барлық шанышқылары кір болады. Егер басқа философ бұрын осы шанышқының біреуін сұраған болса, жеп болған философ шанышқыны тазалап, қайтарады. Бұл шешім жоғары деңгейдегі параллелизмді де қамтамасыз етеді және кез келген үлкен мәселені шеше алады. Ол аштық мәселесін де шешеді. «Таза»/«кір» белгілері ең «аш» процестерге басымдық берудің және жақында «жеген» процестерге артықшылық бермеудің құралы болып табылады. Олардың шешімін, философтарға қатарынан екі рет жеуге рұқсат етілмейтін, арасында басқаларға шанышқыны пайдалануға рұқсат берілмейтін шешіммен салыстыруға болады. Чанди мен Мисраның шешімі бұдан икемді, бірақ осы бағытта да элементтері бар. Олардың талдауында, олар шанышқылардың таралуы мен олардың «таза»/«кір» күйінен басымдық деңгейлері жүйесін шығарады. Олар бұл жүйе бағытталған ациклдік графты сипаттауға болатынын көрсетеді және егер осылай болса, олардың протоколындағы операциялар осы графты циклдікке айналдыра алмайды. Бұл тұйыққа қақтығыс болмайтынын кепілдейді. Дегенмен, егер жүйе толық симметриялық күйде басталатын болса, мысалы, барлық философтар сол жақ шанышқыларын ұстап тұрса, онда граф бастапқыда циклдік болады және олардың шешімі тұйыққа қақтығыстың алдын ала алмайды. Жүйені кішірек ID-сі бар философтардың шанышқылары кір болуы үшін бастапқы орнату графиктің бастапқыда ациклдік екенін қамтамасыз етеді.