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