Хооллож байгаа философичдын асуудал

Чөлөөт нэвтэрхий толь — Википедиагаас
Jump to navigation Jump to search

Энэхүү бодлого нь компьютерийн шинжлэх ухааны алгоритмын асуудлыг маш оновчтой мөн зөв шийдвэрлэхэд тусалдаг. Анх Edsger Dijkstra [1] 1965 онд оюутан байхдаа энэ бодлогыг сэтгэж зохиож байсан бөгөөд дараа нь Tony Hoare[2] илүү амьдралд ойрхон боловсронгуй болгож асуудлыг шийдсэн байна.

Бодлогын гол агуулга[засварлах | edit source]

Хооллох гэж буй Философичдын бодлого

5 философич хамт амьдардаг байв. Тэд амьдралынхаа турш бодох, идэх ажлыг л хийдэг байв. Тэдний хоолны ширээ дугуй хэлбэртэй. Ширээний голд том саванд гоймон байна. Философичдод хамгийн тохирсон хоолыг гоймон гэж үзсэн. Таван ширхэг савх тавих бөгөөд тэгэхдээ хос савх бус нэг л ширхэг савх ширээ тойруулан тавина. Философич өлсвөл ширээ тойруулан тавьсан таван суудлын нэгэнд суун хоолоо идэх боломжтой. Тэгэхдээ давхардаж суухгүй бөгөөд нэг сандал дээр нэг л философич сууна. Гоймонгоо идэхдээ зүүн талд байгаа савхаа аваад, дараа нь баруун талд байгаа савхаа авна. Ингэхдээ хос савх авч болохгүй. Хэрэв өөрийнх нь авах ёстой савхыг өөр хэн нэгэн авсан бол тэр савхыг сулрахыг хүлээнэ. Аль ч философич хоёр савхтай байж л хоол идэх боломжтой болдог. Алгоритм зохиохдоо дээрх бүх нөхцөлийг хангаж байх ёстой.

Алгоритм:[засварлах | edit source]

Dp.pickup(i);

….

eat

Dp.putdown(i);
Monitor dp

{

Enum {THINKING, HUNGRY, EATING} state [5];
Condition self [5];
Void pickup(int i) {
State[i] = HUNGRY;
Test(i);
If {state[i] !=eating}
Self[i].wait{};

}

Void putdown{int i} {
State[i] = THINKING;
Test{{i +4 % 5};
Test{{Ii+ 1 % 5};

}

Void test{int i} {
If {{state[i + 4 % 5] !=EATING} &&
(state[i] == HUNGRY) &&
(state[(i +1) % 5] !=EATING)) {
State[i] = EATING;
Self[i] . signal ();

}

}
initialization.code()

{

for (int i=0; i<5; i++)
State[i] = THINKING;

}

}