Чтение из пустого канала блокируется до появления значения или закрытия. Для семафора это обычно означает лишний Release либо нарушение пары захват–освобождение.
Как происходит блокировка при попытке освободить семафор (прочитать из канала), если в канале нет элементов?
Чтение из пустого канала блокируется до появления значения или закрытия. Для семафора это обычно означает лишний Release либо нарушение пары захват–освобождение.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Чтение из пустого канала блокируется до появления значения или закрытия. Для семафора это обычно означает лишний Release либо нарушение пары захват–освобождение.
В модели «отправка занимает слот, чтение освобождает» освобождать можно только успешно полученный слот. Используйте defer сразу после успешного Acquire. Закрытие канала не является корректным способом завершения такого семафора: оно меняет поведение всех операций. Если нужно проверять лишние освобождения, оформите семафор отдельным типом с явным контрактом.