Назад к вопросам
Разумные решения
Avito
Aston
VK
ivi
Simbirsoft
Junior — Middle
67
Можете объяснить, что такое семафор в контексте программирования и синхронизации потоков?
Компании, где спрашивали
Itexus
Ответ от нейросети
sobes.tech AI
Семафор — это механизм синхронизации, который используется для управления доступом нескольких потоков к общему ресурсу.
Он содержит счетчик, который показывает, сколько потоков могут одновременно получить доступ к ресурсу. Когда поток хочет войти в критическую секцию, он пытается "захватить" семафор:
- Если счетчик больше нуля, он уменьшается на единицу, и поток продолжает работу.
- Если счетчик равен нулю, поток блокируется и ждет, пока другой поток не освободит семафор.
Когда поток заканчивает работу с ресурсом, он освобождает семафор, увеличивая счетчик, позволяя другим потокам продолжить.
Пример использования семафора в Swift (iOS):
let semaphore = DispatchSemaphore(value: 2) // разрешаем одновременно 2 потока
DispatchQueue.global().async {
semaphore.wait() // пытаемся захватить семафор
print("Поток начал работу")
sleep(2) // имитация работы
print("Поток закончил работу")
semaphore.signal() // освобождаем семафор
}
Таким образом, семафор помогает контролировать количество одновременно работающих потоков с общим ресурсом, предотвращая гонки и обеспечивая корректность работы.