Acquire должен дождаться свободного места до запуска новой горутины, если нужно ограничить и число самих горутин. После работы слот освобождается через defer.
Если семафор заполнен и очередная горутина должна быть запущена позже, как должен использоваться Lock/Acquire?
Acquire должен дождаться свободного места до запуска новой горутины, если нужно ограничить и число самих горутин. После работы слот освобождается через defer.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Acquire должен дождаться свободного места до запуска новой горутины, если нужно ограничить и число самих горутин. После работы слот освобождается через defer.
Если брать семафор внутри уже созданной горутины, активные операции ограничатся, но число ожидающих горутин может расти без контроля. Для отменяемого ожидания используйте context-aware Acquire либо select при канальном семафоре. При ошибке получения слота задачу не запускают и Release не вызывают. Не удерживайте посторонний mutex во время долгого ожидания семафора.