На этом шаге рассмотрим инструкцию select.
Инструкция select имеет следующий синтаксис:
select { case передачаИлиПрием1: блок1 ... case передачаИлиПриемN: блокN default : блокD }
В инструкции select проверяется возможность выполнения каждой инструкции передачи или приема, в порядке сверху вниз. Если какие-нибудь из них могут быть выполнены (то есть не будут заблокированы), из них произвольно выбирается одна для продолжения работы. Если ни одна не может быть выполнена (то есть выполнение любой из них приведет к блокировке), возможны два сценария дальнейшего развития событий. Если в инструкции имеется раздел default, он выполняется, и выполнение продолжается с инструкции, следующей за инструкцией select. Но если раздел default отсутствует, инструкция select блокируется, пока хотя бы одно из взаимодействий не станет возможным.
Из такой логики работы инструкции select вытекает следующее. Инструкция select без раздела default блокируется и сможет завершиться, только когда станет возможным одно из предусмотренных взаимодействий (прием или передача). Инструкция select с разделом default не блокируется и выполняется немедленно, либо выполнив одно из взаимодействий, либо, если ни один из каналов не готов к приему или передаче, выполнив раздел default.
На следующем шаге рассмотрим примеры использования инструкции select.