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

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

Бодлогын гол агуулга[засварлах | 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;

}

}