Sobes.tech
Junior — Middle
96

Объясните, чем отличаются механизмы Semaphore и Mutex в контексте управления доступом к ресурсам

Companies where asked
Бренд Монитор

Answer from AI

sobes.tech AI

Semaphore и Mutex — это механизмы синхронизации, используемые для управления доступом к ресурсам, но они отличаются по назначению и поведению:

  • 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 — для ограничения количества одновременных доступов.

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