Семафор ба Мутекс хоёрын ялгаа

Семафор ба Мутекс хоёрын ялгаа
Семафор ба Мутекс хоёрын ялгаа

Видео: Семафор ба Мутекс хоёрын ялгаа

Видео: Семафор ба Мутекс хоёрын ялгаа
Видео: How To Achieve Synchronization In C# While Doing Async Await Multithreaded Programming - .NET Core 2024, Долдугаар сарын
Anonim

Semaphore vs Mutex

Semaphore нь зэрэгцээ програмчлалын орчинд олон процесс нэгэн зэрэг нийтлэг нөөц эсвэл чухал хэсэг рүү нэвтрэхгүй байхын тулд ашигладаг өгөгдлийн бүтэц юм. Үхсэн түгжээ, уралдааны нөхцөл байдлаас зайлсхийхийн тулд семафорыг ашигладаг. Mutex (Харилцан хасах объект) нь хэд хэдэн зэрэгцээ процессоор нэгэн зэрэг нийтлэг нөөцөд хандахаас зайлсхийхэд ашиглагддаг.

Семафор гэж юу вэ?

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

Мутекс гэж юу вэ?

Компьютерийн программыг эхлүүлэх үед энэ нь мутекс үүсгэж, нөөцөд хавсаргана. Нөөцийг урсгалаар ашиглах үед энэ нь түгжигдэх ба бусад хэлхээнүүд үүнийг ашиглах боломжгүй. Хэрэв өөр хэлхээ ижил нөөцийг ашиглахыг хүсвэл хүсэлт гаргах шаардлагатай болно. Дараа нь эхний хэлхээ эх сурвалжтай дуусах хүртэл дараалалд тавигдах болно. Эхний хэлхээг эх сурвалжтай хийж дуусгахад түгжээ арилах ба дараалалд хүлээж буй утас нь нөөцөд хандах боломжтой болно. Хэрэв дараалалд хүлээж буй олон хэлхээ байгаа бол тэдгээрт эргэлдэж хандах эрх олгоно. Практикт, мутекс нь хэд хэдэн урсгалын хооронд нөөцөд хандах хандалтыг ээлжлэн солих үед олон урсгалууд нөөцийг нэгэн зэрэг хэрэглэж байгаа тул энэ нь харагдах болно. Гэхдээ дотооддоо зөвхөн нэг хэлхээ өгөгдсөн цагт эх сурвалжид хандаж байна.

Semaphore болон Mutex хоёрын ялгаа нь юу вэ?

Хэдийгээр семафор болон мутекс объектууд нь зэрэгцээ програмчлалын орчинд бие биенээ үгүйсгэхэд ашиглагддаг ч зарим нэг ялгаа байдаг. Мутекс объект нь зөвхөн нэг урсгалд нөөц эсвэл чухал хэсгийг ашиглахыг зөвшөөрдөг бол семафорууд нь нөөцөд хязгаарлагдмал тооны нэгэн зэрэг хандалт хийхийг зөвшөөрдөг (зөвшөөрөгдсөн дээд хязгаараас доогуур). Мутекс объектын тусламжтайгаар эх сурвалжид хандахыг хүссэн бусад хэлхээнүүд нь одоогийн хэлхээг эх сурвалжийг ашиглаж дуусах хүртэл дараалалд зогсох ёстой.

Зөвлөмж болгож буй: