Middle
Semafor və mutex arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Mutex (Mutual Exclusion) — mexanizm sinxronlaşdırma, hansı ki, müəyyən bir zamanda yalnız bir axının kritik bölməyə və ya resursa girişini təmin edir. O, mülkiyyət prinsipi əsasında işləyir: mutex-i bloklayan axın onu sərbəst buraxmalıdır.
Semafor (Semaphore) — daha ümumi sinxronlaşdırma mexanizmi olub, məhdud sayda "icazə" ilə resursa girişə nəzarət edir. Axınlar, əgər mövcuddursa, icazə ala bilər və icraata davam edə bilər. Resurs artıq lazım deyil, icazə geri qaytarılır. Semaforun mülkiyyət anlayışı yoxdur; hər hansı bir axın semafor sayğacını artıra bilər.
Əsas fərqlər:
- Məqsəd: Mutex tək axın üçün eksklüziv giriş üçün istifadə olunur, semafor isə məhdud resurs hovuzuna girişin idarə olunması üçün.
- Mülkiyyət: Mutex-in sahibi (onu bloklayan axın) var. Semaforun sahibi yoxdur.
- Sayğac: Mutex, 1-ə bərabər sayğaca malik semafor kimi qəbul edilə bilər. Semaforun sayğacı 1-dən çox ola bilər.
- Əməliyyatlar: Mutex:
WaitOne/Pulse/ReleaseMutex. Semafor:WaitOne/Release.
Budur C#-da semafor istifadəsinin sadə nümunəsi:
// 2 başlanğıc dəyəri və maksimum 2 olan semafor yaradırıq.
// Eyni zamanda 2 axın resursa giriş edə bilər.
SemaphoreSlim semaphore = new SemaphoreSlim(2, 2);
// Axın resursa giriş etməyə çalışır
semaphore.WaitOne();
// ... resursla işləmə ...
semaphore.Release(); // İcazəni azad et
Mutex nümunəsi:
// Mutex yaradırıq
Mutex mutex = new Mutex();
// Axın eksklüziv giriş almağa çalışır
mutex.WaitOne();
// ... kritik bölmə ilə işləmə ...
mutex.ReleaseMutex(); // Mutex-i azad et (yalnız sahibi edə bilər)