В типичном поточном приложении, где «500 записей» неизвестны, я думаю, что для некоторого общего процесса управления было бы более распространенным остановить все потоки, когда работа была выполнена.
Для вашей конкретной задачи вы можете добавить понятие EOF
к вашим FIFO, чтобы читатель мог различить «ничего не доступно сейчас» и «ничего не доступно никогда». Это может быть как простое значение (возможно, 0
не является допустимым значением для ваших потоков и может представлять это).
Затем ваш производитель «закрывает» свой конец FIFO, а когда он становится пустым, полупотребители видят EOF
и закрывают свой конец следующего FIFO. Точно так же, как с реальными файлами, вам понадобится подсчет ссылок, чтобы знать, когда оба производителя были сделаны или когда оба полупотребителя были сделаны.