Встречается на собеседованиях • сегодня

В чем разница между Semaphore и Mutex

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

  1. Владение:
    • Mutex — эксклюзивный доступ. Только один поток может владеть им одновременно.
    • Semaphore — разрешает доступ нескольким потокам (задается максимальное количество).
  1. Освобождение:

    • Mutex должен освобождаться тем же потоком, который его захватил.
    • Semaphore может освобождаться любым потоком.
  2. Использование:

    • Mutex — для защиты критических секций (например, изменение общего ресурса).
    • Semaphore — для ограничения доступа к пулу ресурсов (например, подключения к БД).

Пример:

csharp
// Mutex
var mutex = new Mutex();
mutex.WaitOne(); 
// Критическая секция
mutex.ReleaseMutex();

// Semaphore (макс. 5 потоков)
var semaphore = new Semaphore(5, 5);
semaphore.WaitOne(); 
// Работа с ресурсом
semaphore.Release();

Итог: Mutex — для эксклюзивного доступа, Semaphore — для ограниченного параллелизма.

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы