Параллельная очередь на основе времени ожидания в C ++ - PullRequest
2 голосов
/ 30 октября 2010

Я пытаюсь разработать параллельную очередь, используя потоки POSIX + C ++ со следующей семантикой:

  1. Некоторые потоки могут вызывать push (item, timeout), и если добавление элемента не происходит по тайм-ауту, его следует отклонить.
  2. Некоторые потоки могут вызывать pop (item, timeout) и снова, если удаление элемента не происходит по тайм-ауту, его следует отклонить.
  3. Некоторые потоки всегда будут вызывать push (item) и pop (item), что означает, что они всегда выполняются - без ограничений по времени.

Мои вопросы:

  1. Полагаю, имеет смысл расставить приоритеты для потоков с тайм-аутами. Поэтому я использую планирование pthread для выделения более высокого приоритета потокам с тайм-аутом. Это единственный подход, который я могу предпринять?
  2. Несмотря на изменение приоритетов потоков, некоторые потоки с таймаутами должны быть отклонены. Как сохранить это как минимум?

Ответы [ 2 ]

1 голос
/ 30 октября 2010

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

Минимизация тайм-аутов полностью ложится на приложение. Если вы не хотите, чтобы ваши авторы использовали тайм-аут, убедитесь, что читатели быстро набрасывают сообщения.

Я должен сказать, однако, что я нахожу идею смешивания временных и несвоевременных официантов (по крайней мере, с одной стороны) довольно странной. Вы имеете в виду какой-то конкретный пример использования?

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