Условие завершения единственного потока-потребителя звучит просто: он считает все потребленные объекты и останавливается по достижении nitems.Листинг 10.14. Функция, выполняемая потоком-потребителем
//pxsem/prodcons3.с
62 void *
63 consume(void *arg)
64 {
65 int i;
66 for (i = 0; i < nitems; i++) {
67 Sem_wait(&shared.nstored); /* ожидание помещения по крайней мере одного элемента в буфер */
68 Sem_wait(&shared.mutex);
69 if (shared.buff[i % NBUFF] != i)
70 printf("error: buff[%d] = %d\n", i, shared.buff[i % NBUFF]);
71 Sem_post(&shared.mutex);
72 Sem_post(&shared.nempty); /* еще одно пустое поле */
73 }
74 return(NULL);
75 }