Зачем тут у freeBytes в конструкторе BufferSize? по моему достаточно 1, мы же 1 ресурс захватываем и освобождаем. Я попробовал с 1 результат тот же. что и с BufferSize. Что по моему логично. Но зачем тогда freeBytes(BufferSize)?
Да, 1 достаточна, но если у Producer'а есть "фронт работ", зачем он должен каждый раз ждать пока Consumer распечатает? Красивый примерчик.