Sobes.tech
Назад к вопросам
Junior — Middle
67

Можете объяснить, что такое семафор в контексте программирования и синхронизации потоков?

Компании, где спрашивали
Itexus
Разумные решенияРазумные решения
AvitoAvito
AstonAston
VKVK
iviivi
SimbirsoftSimbirsoft

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

sobes.tech AI

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

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

  • Если счетчик больше нуля, он уменьшается на единицу, и поток продолжает работу.
  • Если счетчик равен нулю, поток блокируется и ждет, пока другой поток не освободит семафор.

Когда поток заканчивает работу с ресурсом, он освобождает семафор, увеличивая счетчик, позволяя другим потокам продолжить.

Пример использования семафора в Swift (iOS):

let semaphore = DispatchSemaphore(value: 2) // разрешаем одновременно 2 потока

DispatchQueue.global().async {
    semaphore.wait() // пытаемся захватить семафор
    print("Поток начал работу")
    sleep(2) // имитация работы
    print("Поток закончил работу")
    semaphore.signal() // освобождаем семафор
}

Таким образом, семафор помогает контролировать количество одновременно работающих потоков с общим ресурсом, предотвращая гонки и обеспечивая корректность работы.