Implementing the "producer-consumer" task using semaphores
Процесс (thread) producer получает символы, вводимые с клавиатуры, и записывает их в кольцевой буфер. Параллельные ему процессы consumer считывают символы с кольцевого буфера. Причем первый процесс считывает только символы, являющиеся буквами английского алфавита (прописные и строчные), второй только символы – цифры, а третий все остальные символы. Если текущий символ в буфере не является типом символов, с которыми работает исполняющийся процесс consumer, то этот процесс не изменяет содержимое буфера. Для организации критических секций при доступе к общему ресурсу – кольцевому буферу - использовать бинарный семафор, а также считающие семафоры для подсчета пустых (empty) и заполненных (full).