Ответ
Семафор — это механизм синхронизации, который ограничивает доступ к ресурсу. В отличие от мьютекса, семафор может разрешать доступ нескольким потокам одновременно.
Виды:
- Counting Semaphore — позволяет N потокам работать с ресурсом.
- Binary Semaphore (аналог мьютекса) — разрешает доступ только одному потоку.
Пример в Kotlin:
val semaphore = Semaphore(3) // Разрешает 3 потока одновременно
fun accessResource() {
semaphore.acquire() // Захватываем разрешение
try {
// Работа с ресурсом
} finally {
semaphore.release() // Освобождаем разрешение
}
}
Где использовать:
- Ограничение подключений к БД.
- Управление пулом потоков.
- Контроль доступа к API с лимитами.
⚠️ Важно избегать deadlock и правильно освобождать разрешения (release() в finally).