Элегантные способы уведомить потребителя, когда производитель закончил?

Я реализую concurrent_blocking_queue с минимальным набором функций:

//a thin wrapper over std::queue
template
class concurrent_blocking_queue
{
    std::queue m_internal_queue;
     //...
 public:
     void add(T const & item);
     T&   remove();
     bool empty();
};

Я собираюсь использовать это для проблемы производителя-потребителя ( Думаю, именно здесь такие структуры данных используются?). Но я застрял на одной проблеме:

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

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

5
задан Nawaz 27 February 2012 в 12:40
поделиться