Мне нужно реализовать вариант на классических производителях-потребителях с проблемой ограниченных буферов.В некотором смысле, это больше похоже на читателей-писателей с ограниченным буфером.
У меня есть один производитель и два потребителя, но ОБА потребители должны прочитать каждый элемент из буфера, прежде чем он будет перезаписан, поэтому базовое решение не работает.
Я наивно пытался заставить продюсера дважды подождать на пустом семафоре, а затем дважды заполнить сигнал, но это не сработало, поскольку я ожидал, что это не такк.
Очень простое решение состоит в том, чтобы заставить производителя производить, затем сигнализировать каждому потребителю и ждать дважды.Каждый потребитель ждет производителя, затем потребляет, затем сигнализирует читателю.В этом решении, по крайней мере, потребители по-прежнему работают одновременно, но в действительности это не отражает дух проблемы и не использует буфер.Я мог бы расширить его таким образом, чтобы производитель создавал n элементов в буфере, а затем ждал, пока потребители прочитают их, и это, по крайней мере, уменьшает некоторые накладные расходы, но в конечном итоге ничем не отличается.
Ограничения:
- только pthreads
- только один буфер
Сводка:
- Один производитель записывает в буфер
- Каждый потребитель должен прочитать каждый элемент из буфера, прежде чем он будет перезаписан производителем.
Я просто не могу понять, как применить традиционное решение в этом случае.