boost :: asio async condition

La idea es poder reemplazar el código multiproceso con boost :: asio y un grupo de subprocesos, en un problema de consumidor / productor. Actualmente, cada hilo de consumidor espera en unboost::condition_variable - Cuando un productor agrega algo a la cola, llama.notify_one/notify_all Notificar a todos los consumidores. Ahora, ¿qué sucede cuando (potencialmente) tienes 1k + consumidores? ¡Los hilos no escalan!

Decidí usarboost::asio, pero luego me encontré con el hecho de que no tiene variables de condición. Y entoncesasync_condition_variable nació:

class async_condition_variable
{
private:
    boost::asio::io_service& service_;
    typedef boost::function<void ()> async_handler;
    std::queue<async_handler> waiters_;

public:
    async_condition_variable(boost::asio::io_service& service) : service_(service)
    {
    }

    void async_wait(async_handler handler)
    {
        waiters_.push(handler);
    }

    void notify_one()
    {
        service_.post(waiters_.front());
        waiters_.pop();
    }

    void notify_all()
    {
        while (!waiters_.empty()) {
            notify_one();
        }
    }
};

Básicamente, cada consumidor llamaríaasync_condition_variable::wait(...). Entonces, un productor eventualmente llamaríaasync_condition_variable::notify_one() oasync_condition_variable::notify_all(). Cada asa del consumidor se llamaría y actuaría según la condición o llamadaasync_condition_variable::wait(...) otra vez. ¿Es esto posible o estoy loco aquí? ¿Qué tipo de bloqueo (exclusión mutua) se debe realizar, dado que se ejecutaría en un grupo de subprocesos?

P.S .: Sí, esto es más una RFC (Solicitud de comentarios) que una pregunta :).

Respuestas a la pregunta(3)

Su respuesta a la pregunta