Middle
52
questionbank

Что такое семафор?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Семафор - это низкоуровневый примитив синхронизации, который контролирует доступ к ресурсам. Он поддерживает счетчик (счетчик доступных ресурсов) и две основные операции: ожидание (wait) и сигнал (signal).

  • Ожидание (Wait / wait()): Уменьшает счетчик. Если счетчик становится отрицательным (что указывает на отсутствие доступных ресурсов), текущий поток блокируется до тех пор, пока другой поток не вызовет сигнал.
  • Сигнал (Signal / signal()): Увеличивает счетчик. Если после увеличения счетчик становится неотрицательным и есть заблокированные потоки, один из них разблокируется.

Семафоры могут использоваться для:

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

В Darwin (основа iOS):

swift

Основные типы семафоров:

  • Бинарный семафор: Значение счетчика может быть только 0 или 1. Действует аналогично мьютексу.
  • Счетный семафор: Значение счетчика может быть больше 1, что позволяет ограничить доступ к ресурсу определенному количеству потоков одновременно.