condição assíncrona boost :: asio

A idéia é poder substituir o código multithread com boost :: asio e um pool de threads, em um problema consumidor / produtor. Atualmente, cada segmento consumidor espera em umboost::condition_variable - quando um produtor adiciona algo à fila, ele chamanotify_one/notify_all notificar todos os consumidores. Agora, o que acontece quando você (potencialmente) tem 1k + consumidores? Tópicos não serão escalados!

Eu decidi usarboost::asio, mas depois me deparei com o fato de que não tem variáveis ​​de condição. E depoisasync_condition_variable nasceu:

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();
        }
    }
};

Basicamente, cada consumidor ligariaasync_condition_variable::wait(...). Então, um produtor acabaria chamandoasync_condition_variable::notify_one() ouasync_condition_variable::notify_all(). A alça de cada consumidor seria chamada, e agiria sob a condição ou chamariaasync_condition_variable::wait(...) novamente. Isso é possível ou estou sendo louco aqui? Que tipo de bloqueio (mutexes) deve ser executado, dado o fato de que isso seria executado em um pool de threads?

P.S .: Sim, isso é mais um RFC (Request for Comments) do que uma pergunta :).

questionAnswers(3)

yourAnswerToTheQuestion