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

«Что такое семафоры» — вопрос из категории Многопоточность, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Семафор — это механизм синхронизации, который ограничивает доступ к ресурсу. В отличие от мьютекса, семафор может разрешать доступ нескольким потокам одновременно.

Виды:

  • Counting Semaphore — позволяет N потокам работать с ресурсом.
  • Binary Semaphore (аналог мьютекса) — разрешает доступ только одному потоку.

Пример в Kotlin:

val semaphore = Semaphore(3) // Разрешает 3 потока одновременно

fun accessResource() {
    semaphore.acquire() // Захватываем разрешение
    try {
        // Работа с ресурсом
    } finally {
        semaphore.release() // Освобождаем разрешение
    }
}

Где использовать:

  • Ограничение подключений к БД.
  • Управление пулом потоков.
  • Контроль доступа к API с лимитами.

⚠️ Важно избегать deadlock и правильно освобождать разрешения (release() в finally).