Я реализую 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
) хорошей идеей?
Я встречал много примеров, но все они имеют бесконечный цикл, как будто производитель будет производить предметы вечно. Никто не обсуждал проблему условия остановки, даже статья вики .