Junior — Middle
Обяснете какво се различава между механизмите Semaphore и Mutex в контекста на управление на достъпа до ресурси
sobes.tech AI
Отговор от AI
Semaphore и Mutex са механизми за синхронизация, използвани за управление на достъпа до ресурси, но се различават по предназначение и поведение:
-
Mutex (взаимно изключване) е примитив, който позволява на един поток да притежава ресурс едновременно. Той осигурява ексклузивен достъп. Ако поток е заключил mutex, други ще чакат, докато не бъде освободен.
-
Semaphore (брояч на разрешения) е по-общ механизъм, който съдържа брояч, определящ колко потока могат едновременно да имат достъп до ресурс. Например, семафор с брояч 3 ще позволи на трима потока да работят с ресурса едновременно.
Пример в C#:
// Mutex
Mutex mutex = new Mutex();
mutex.WaitOne(); // заключване на mutex
// критична секция
mutex.ReleaseMutex(); // освобождаване
// Semaphore
Semaphore semaphore = new Semaphore(3, 3); // максимум 3 потока
semaphore.WaitOne(); // получаване на разрешение
// критична секция
semaphore.Release(); // освобождаване на разрешението
Обобщение:
- Mutex — за ексклузивен достъп до ресурс.
- Semaphore — за ограничаване на броя на едновременните достъпи.
Това е ключовата разлика при избор на механизъм за синхронизация.