Junior — Middle
95
Объясните, чем отличаются механизмы Semaphore и Mutex в контексте управления доступом к ресурсам
Компании, где спрашивали
Бренд Монитор
Ответ от нейросети
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 — для ограничения количества одновременных доступов.
Это ключевое различие при выборе механизма для синхронизации.