Semaphore vs Monitor
Semaphore нь зэрэгцээ програмчлалын орчинд олон процесс нэгэн зэрэг нийтлэг нөөц эсвэл чухал хэсэг рүү нэвтрэхгүй байхын тулд ашигладаг өгөгдлийн бүтэц юм. Үхсэн түгжээ, уралдааны нөхцөл байдлаас зайлсхийхийн тулд семафорыг ашигладаг. Монитор нь програмчлалын хэлний бүтэц бөгөөд нийтлэг нөөцөд нэгэн зэрэг хандах олон процессоос зайлсхийхэд ашиглагддаг тул бие биенээ үгүйсгэх баталгаа болдог. Мониторууд энэ даалгаварыг биелүүлэхийн тулд нөхцөлт хувьсагчдыг ашигладаг.
Семафор гэж юу вэ?
Semaphore нь чухал хэсгүүдэд харилцан хамааралгүй болгоход ашигладаг өгөгдлийн бүтэц юм. Семафорууд нь хүлээх (түүхэнд P гэгддэг) ба дохио (түүхэнд V гэгддэг) гэсэн хоёр үйлдлийг дэмждэг. Хүлээх ажиллагаа нь семафор нээгдэх хүртэл процессыг хааж, дохионы үйлдэл нь өөр процесс (thread) оруулах боломжийг олгодог. Семафор бүр нь хүлээх процессуудын дараалалтай холбоотой байдаг. Хүлээх үйлдлийг thread-ээр дуудах үед семафор нээлттэй байвал урсгалыг үргэлжлүүлж болно. Хүлээлтийн үйлдлийг thread-ээр дуудах үед семафор хаагдсан бол thread нь хаагдсан бөгөөд дараалалд хүлээх шаардлагатай болдог. Сигналын үйлдэл нь семафорыг нээдэг бөгөөд хэрэв дараалалд аль хэдийн хүлээгдэж буй утас байгаа бол уг процессыг үргэлжлүүлэхийг зөвшөөрч, дараалалд хүлээгдэж буй утас байхгүй бол дараагийн хэлхээнд дохиог санах болно. Мутекс семафор болон тоолох семафор гэж хоёр төрлийн семафор байдаг. Mutex семафорууд нь нөөцөд нэг хандалт хийх боломжийг олгодог ба семафоруудыг тоолох нь олон урсгалыг нөөцөд хандах боломжийг олгодог (хэд хэдэн нэгж боломжтой).
Монитор гэж юу вэ?
Монитор нь хуваалцсан өгөгдөлд хандах хандалтыг удирдахад хэрэглэгддэг програмчлалын хэлний бүтэц юм. Мониторууд нь хуваалцсан өгөгдлийн бүтэц, процедур (хуваалцсан өгөгдлийн бүтцэд ажилладаг) болон зэрэгцээ процедурын дуудлагуудын хоорондох синхрончлолыг багтаадаг. Монитор нь өөрийн өгөгдөл нь бүтэцгүй хандалттай тулгардаггүй эсэхийг баталгаажуулж, дамжлага (түүний горимоор дамжуулан мониторын өгөгдөлд ханддаг) хууль ёсны дагуу харилцан үйлчлэхийг баталгаажуулдаг. Монитор нь тухайн үед зөвхөн нэг хэлхээнд ямар ч мониторын процедурыг гүйцэтгэхийг зөвшөөрснөөр харилцан үл хамаарах байдлыг баталгаажуулдаг. Хэрэв thread нь монитор дээр процедурыг аль хэдийн гүйцэтгэж байх хооронд өөр thread монитор дахь аргыг дуудах гэж оролдвол хоёр дахь процедурыг хааж, дараалалд хүлээх хэрэгтэй болно. Hoare монитор ба Меса монитор гэсэн хоёр төрлийн монитор байдаг. Тэдгээр нь үндсэн хуваарийн утгаараа ялгаатай.
Semaphore болон Monitor хоёрын ялгаа нь юу вэ?
Хэдийгээр семафорууд болон мониторууд нь зэрэгцээ програмчлалын орчинд бие биенээ үгүйсгэхэд ашиглагддаг ч энэ зорилтыг хэрэгжүүлэхэд ашигладаг техникээрээ ялгаатай. Мониторуудад бие биенээ үгүйсгэхэд ашигладаг код нь нэг газар байрладаг бөгөөд илүү бүтэцтэй байдаг бол семафорын кодууд нь хүлээх болон дохионы функцийн дуудлага хэлбэрээр тархдаг. Мөн семафорыг хэрэгжүүлэхэд алдаа гаргах нь маш амархан байдаг бол мониторуудыг хэрэгжүүлэхэд алдаа гаргах магадлал маш бага байдаг. Цаашилбал, мониторууд нөхцөлийн хувьсагчдыг ашигладаг бол семафорууд ашигладаггүй.