Первый случай с k==3
не будет работать, потому что вы пишете на канал done
, но ничего не слушаете, поэтому он там висит. Если вы хотите выйти для случая k==3
, вместо записи в канал поместите код, который существует прямо здесь.
Вторая часть, когда k==4
, вероятно, работает, потому что, когда основное время ожидания, он записывает done
, который будет получен первым регистром в select. Но, вероятно, программа заканчивается до того, как у нее есть шанс выполнить. Вы можете перевести спящий режим в режим main после записи на канал done
, чтобы убедиться в этом.