Sobes.tech
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 — за ограничаване на броя на едновременните достъпи.

Това е ключовата разлика при избор на механизъм за синхронизация.