42-53 Критическая область кода производителя состоит из проверки на достижение конца массива (завершение работы) и трех строк, помещающих очередное значение в массив: Мы защищаем эту область с помощью взаимного исключения, не забыв разблокировать его после завершения работы. Обратите внимание, что увеличение элемента count (через указатель arg) не относится к критической области, поскольку у каждого потока счетчик свой (массив count в функции main). Поэтому мы не включаем эту строку в блокируемую взаимным исключением область. Один из принципов хорошего стиля программирования заключается в минимизации объема кода, защищаемого взаимным исключением.Формирование данных
if (shared.nput >= nitems)
shared.buff[shared.nput] = shared.nval;
shared.nput++;
shared.nval++;