Sobes.tech
Назад к вопросам
Middle
4

Как работает семафор? В чём его особенность по сравнению с lock?

Компании, где спрашивали
ИТ Инополис

Ответ от нейросети

sobes.tech AI

Семафор — это механизм синхронизации, который управляет доступом к ограниченному числу ресурсов. Он содержит счетчик, который показывает, сколько потоков могут одновременно получить доступ.

Как работает семафор:

  • Изначально счетчик равен количеству доступных ресурсов.
  • Поток вызывает Wait (или WaitOne), уменьшая счетчик на 1.
  • Если счетчик становится меньше 0, поток блокируется и ждет освобождения ресурса.
  • Когда поток заканчивает работу с ресурсом, он вызывает Release, увеличивая счетчик и разблокируя ожидающие потоки.

Особенность по сравнению с lock (мьютексом):

  • Lock позволяет одновременно работать только одному потоку (бинарный семафор).
  • Semaphore позволяет ограничить количество одновременно работающих потоков (например, 3 потока одновременно).

Пример использования семафора в C#:

SemaphoreSlim semaphore = new SemaphoreSlim(3); // максимум 3 потока

async Task AccessResourceAsync() {
    await semaphore.WaitAsync();
    try {
        // работа с ресурсом
    } finally {
        semaphore.Release();
    }
}