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

Что такое Semaphore

Семафор — это примитив синхронизации, который ограничивает количество потоков, одновременно получающих доступ к ресурсу. В отличие от lock, который позволяет работать только одному потоку, семафор может разрешать доступ N потокам.

Основные методы:

  • WaitOne() — уменьшает счетчик семафора (если счетчик = 0, блокирует поток)
  • Release() — увеличивает счетчик (разблокирует ожидающие потоки)

Пример:

csharp
Semaphore semaphore = new Semaphore(2, 2); // Максимум 2 потока одновременно

void AccessResource()
{
    semaphore.WaitOne();
    try 
    {
        // Работа с ресурсом
    }
    finally 
    {
        semaphore.Release();
    }
}

Важно: семафоры могут быть именованными (для межпроцессного взаимодействия) и локальными. Также есть SemaphoreSlim — легковесная версия для внутрипроцессной синхронизации.

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