Унтамхай үсчний бодлого
Унтамхай үсчний бодлого (англиар:Sleeping barber problem) гэдэг нь олон үйлдлийн системтэй процессорын процесс хоорондох дотоод харилцаа мөн зэрэгцүүлэлтийн асуудалд гардаг компьютерийн ухааны сонгодог бодлог юм.
Бодит амьдрал дээрх үсчин өрөөндөө суугаад үйлчлүүлэгч ирвэл үсийг засах ба нэмж үйлчлүүлэгч ирвэл хүлээлгийн сандал дээр сууж, бүр байхгүй бол үсчин амардаг үйл явцтай төстэй процесс компьютерийн ухаанд их гардаг тул ерөнхийд нь унтамхай үсчний бодлого гэж нэрлэдэг ажээ.
Унтамхай үсчний бодлогын хамгийн сонгодог жишээ нь: Ганц үсчинтэй нэгэн үсчний газар байжээ, тэрээр нэг л үсчний сандалтай бөгөөд харин хүлээлгийн өрөөндөө "n" тооны сандалтай. Үсчин нь үйлчлүүлэгчийнхээ үсийг засаж дуусвал түүнийг үдэж гаргаад хүлээлгийн өрөөнд орж өөр үйлчлүүлэгч байгаа эсэхийг шалгадаг, хэрвээ үйлчлүүлэгчид байвал аль нэгийг нь үсчний сандал дээрээ суулган үсийг засах ба бүх үйлчлүүлэгч үсээ засуулж дуусвал үсчин өөрөө үсчнийхээ сандал дээр суугаад унтдаг.
Үйлчлүүлэгчдийн хувьд гэвэл үйлчлүүлэгч үсчний газар орж ирээд үсчний юу хийж байгааг харна, хэрвээ үсчин унтаж байх юм бол түүнийг сэрээж үсээ засуулна, харин үсчин өөр үйлчлүүлэгчийн үсийг засч байвал хүлээлгийн өрөөнд орж сул суудал байгаа эсэхийг шалгадаг ба сул суудал байвал сууж байхгүй бол үсчний газраас гардаг байна.
Энэ процесс дээр үсчин нь бүх үйлчлүүлэгч дуустал үс засаад л байдаг, үйлчлүүлэгчид дуусвал дахин үйлчлүүлэгч иртэл унтаад л байдаг гэх мэт хэтэрхий хийсвэр дүрслэгдэж байгаа ч гэсэн ингэснээр энэ процесс алдаагүй дэс дарааллаараа ажиллах баталгаатай болж байгаа юм. Амьдрал дээр яг ийм процесс үүсгэнэ гэвэл маш их асуудалтай бараг боломжгүй мэт боловч энэ процессийн бүх циклийг бодит амьдрал дээрээс ажиглан компьютерийн ухаанд тохируулан зохиосон гэдэг нь тодорхой харагдана. Компьютерийн ухаанд ийм төрлийн процесс үүсгэн шийдвэрлэх асуудал их гардаг билээ.
Компьютерийн ухааныг хөгжүүлсэн анхдагчдын нэг Эдгер Диекстра (англиар:Edsger Dijkstra) 1965 онд "Унтамхай үсчний бодлого"-ыг анх дэвшүүлсэн гэж тооцогддог.
Энэ бодлогыг шийдэх олон боломжит арга байдаг.
Жишээ нь: Процесст оролцогч бүрийн анхдагч түлхүүрийг мутекс (англиар:mutex) гэж тодорхойлох, ингэснээр процесст оролцогчдын аль нэг нь л нэг удаа орчны төлвийг өөрчлөх боломжтой болно. Үсчин өөр үйлчлүүлэгч байгаа эсэхийг шалгахаасаа өмнө мутексийн гаралтыг (mutex exclusion) эзэмших бөгөөд үс засах эсвэл унтахд үедээ бусад оролцогчидод шилжүүлнэ. Үйлчлүүлэгч нь үсчинд орохоосоо өмнө мутексийн гаралтыг эзэмших бөгөөд үсчний сандал суух эсвэл хүлээлгийн сандал дээр суух үедээ бусад оролцогчидод шилжүүлнэ. Энэ аргаар аргаар амьдрал дээр тохиолддог олон нэмэлт асуудлуудыг арилгах боломжтой болно. Бас орчний төлөвийг илэрхийлэхтйн тулд нэжгээд тооны семафор (англиар:semaphore) шаардлагатай болдог. Жишээ нь нэг семафор ашиглан хүлээлийн өрөөнд байгаа үйлчлүүлэгчдийн тоог хадгалах боломжтой юм.
Бодлогыг шийдсэн нь:
Доорх псевдокодоор үсчин үйлчлүүлэгч хоёрын үйл ажиллагааг зэрэг явуулах мөн түгжрэлд орохоос сэргийлэх боломжтой, гэвч зөвхөн түрүүлж ирсэн хэдэн үйлчлүүлэгчийн үсийг ээлжлэн зассаар хойно ирсэн зарим үйлчлүүлэгч хэзээч үйлчлүүлэх боломжгүй болгох буюу нөөцийн дутагдалд орох (англиар:starvation) тал бий. Доорх псевдокодын wait(), signal() гэсэн функцүүд нь семафор бүхий функц юм. "C" хэл дээр wait() функцийг P(), signal() функцийг V() гэж тэмдэглэнэ.