Монитор(Синхрончлол)

Програмчлалд олон програм, эсвэл олон процесс дундаа нэг нөөц ашиглах эсвэл нэг файлд зэрэг хандах үед эгзэгтэй мужийн асуудал тулгардаг. Энэ асуудлыг солболцол (mutual exclusion) ашиглан шийдэх аргыг Монитор гэнэ. Тодорхой нэг хугацаанд хамгийн ихдээ ганц л процессд өөрийнхөө аль нэг аргыг хэрэгжүүлэх боломж олгодог.

Мониторт мөн ажиллаж буй процесс өөрт байгаа давуу эрхээсээ түр татгалзах механизм байдаг. Тодорхой нөхцөл биелээгүй тохиолдолд онцгой эрхээ дараагийн процессд шилжүүлэх ба нөхцөл биелмэгц бусад процессуудад сигналаар мэдэгдэнэ.

Мониторын аргийг анх [C. A. R. Hoare], [Per Brinch Hansen] нар зохион бүтээсэн ба хамгийн анх Brinch Hansen-ы PASCAL-FC хэлэнд тусгагджээ.

СолболцолЗасварлах

Энгийн жишээ. Монитор банкны гүйлгээ явуулж байна гэж бодьё.

monitor class Account {
  private int balance := 0
  invariant balance >= 0

  public method boolean withdraw(int amount)/* Данснаас мөнгө авах/
     precondition amount >= 0
  {
    if balance < amount then return false
    else { balance := balance - amount ; return true }
  }

  public method deposit(int amount)/*Дансанд мөнгө нэмэх/
     precondition amount >= 0
  {
    balance := balance + amount
  }
}

Процесс мониторын аргыг биелүүлж байх үеийг "давуу эрх олгогдсон" гэж ойлгож болно. Тодорхой нэг ижил хугацаанд хамгийн ихдээ ганц процесс л мониторын давуу эрхийг эзэмшинэ. Энэ нь мониторын солбилцолын хамгийн чухал шинж чанар. Процесс аргаа хэрэгжүүлэхээс урьд өөр ямар ч процесс мониторынхоо аргыг хэрэгжүүлээгүй байгаа эсэхийг нягтлах ба тийм тохиолдолд үүсвэл л өөрийнхөө аргыг хэрэгжүүлнэ.

Хэрвээ мониторын хяналт байгаагүй бол дээрх жишээн дээр дансан дахь мөнгө ямар ч шалтгаангүй хасагдаж эсвэл ямар ч шалтгаангүйгээр нэмэгдэж болзошгүй. Жишээ нь хоёр процесс данснаас 1000-г авах хүсэлт явуулсан гэвэл хоёулаа true утга буцааж болно. Эхлээд хоёр процесс хоёулаа дансны үлдэгдлийг шалгах хүсэлт явуулаад хоёулаа 1000-аас илүү гэсэн утга хүлээн авна, тэгээд тус тусдаа 1000-аар бууруулаад тэр утгаараа дансны үлдэгдлийг хадгална. Үр дүнд нь 2000 гарсан боловч дансны үлдэгдэл 1000-аар л буурна/

Монитор объект болгонд хувийн цоож /private lock/ олгосноор солбилцлыг хөрвүүлэгчийн түвшинд шийдэж болно. Энэ цоож нь програм эхлэхэд цоожтой байх ба public арга дуудагдан ажилаж эхлэх бүрт цоожлогдож, public арга утга буцаах бүрт нээгдэнэ.