Один производитель, два варианта для потребителей - PullRequest
1 голос
/ 07 апреля 2011

Мне нужно реализовать вариант на классических производителях-потребителях с проблемой ограниченных буферов.В некотором смысле, это больше похоже на читателей-писателей с ограниченным буфером.

У меня есть один производитель и два потребителя, но ОБА потребители должны прочитать каждый элемент из буфера, прежде чем он будет перезаписан, поэтому базовое решение не работает.

Я наивно пытался заставить продюсера дважды подождать на пустом семафоре, а затем дважды заполнить сигнал, но это не сработало, поскольку я ожидал, что это не такк.

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

Ограничения:

  • только pthreads
  • только один буфер

Сводка:

  • Один производитель записывает в буфер
  • Каждый потребитель должен прочитать каждый элемент из буфера, прежде чем он будет перезаписан производителем.

Я просто не могу понять, как применить традиционное решение в этом случае.

1 Ответ

0 голосов
/ 01 ноября 2011

Как насчет предоставления каждому потребителю его собственной очереди ссылок на элементы данных, а затем чтобы производитель подавал обе очереди?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...