Middle
Semafor va mutex o'rtasidagi farq nima?
sobes.tech AI
AIdan javob
Mutex (Mutual Exclusion) — bu umumiy sinxronlash mexanizmi bo‘lib, u ma’lum bir vaqtda faqat bitta oqimga kodning kritik bo‘limiga yoki resursga kirish imkonini beradi. U egalik tamoyiliga asoslangan: mutexni bloklagan oqim uni ochishi kerak.
Semafor (Semaphore) — yanada umumiyroq sinxronlash mexanizmi bo‘lib, cheklangan miqdordagi "ruxsat" bilan resursga kirishni boshqaradi. Oqimlar, agar ruxsat mavjud bo‘lsa, olishi mumkin va bajarilishni davom ettiradi. Resurs endi kerak bo‘lmasa, ruxsat qaytariladi. Semafor egalik konseptiga ega emas; har qanday oqim semafor hisoblagichini oshirishi mumkin.
Asosiy farqlar:
- Ma’no: Mutex faqat bitta oqim uchun eksklyuziv kirishni ta’minlaydi, semafor esa cheklangan resurslar to‘plamiga kirishni boshqaradi (bir nechta oqim limiti gacha).
- Egalik: Mutex egaliga (uni bloklagan oqimga) ega. Semafor egaliga ega emas.
- Hisoblagich: Mutex, 1 ga teng hisoblagichga ega semafor sifatida qaralishi mumkin. Semafor hisoblagichi 1 dan katta bo‘lishi mumkin.
- Operatsiyalar: Mutex:
WaitOne/Pulse/ReleaseMutex. Semafor:WaitOne/Release.
Mana C#da semafor ishlatishning oddiy misoli:
// 2 boshlang‘ich qiymat va maksimal qiymat bilan semafor yaratamiz.
// Bir vaqtning o‘zida 2 oqim resursga kirishi mumkin.
SemaphoreSlim semaphore = new SemaphoreSlim(2, 2);
// Oqim resursga kirishga harakat qilmoqda
semaphore.WaitOne();
// ... resurs bilan ishlash ...
semaphore.Release(); // Ruxsatni bo‘shatish
Mutex misoli:
// Mutex yaratamiz
Mutex mutex = new Mutex();
// Oqim eksklyuziv kirishni olishga harakat qilmoqda
mutex.WaitOne();
// ... kritik bo‘lim bilan ishlash ...
mutex.ReleaseMutex(); // Mutexni bo‘shatish (faqat egasi mumkin)