boost :: pool de threads asio io_service

Quelle est la bonne utilisation des paramètres d'un pool de threads pour io_service? Ces 2 états de la la documentation sont en me jetant off:

io_service::run

Une sortie normale à partir de la fonction run() implique que le io_service objet est à l'arrêt (à l'arrêt() la fonction renvoie la valeur true). Les appels suivants à run(), run_one(), poll() ou poll_one() retourne immédiatement, sauf s'il existe un précédent appel à reset().

io_service::reset

Cette fonction doit être appelée avant toute seconde ou plus tard, d'invocations de l'run(), run_one(), poll() ou poll_one() fonctions lors d'un appel précédent de ces fonctions retournés en raison de la io_service d'être arrêté ou en cours d'exécution hors du travail.

Voici ce que je suis en train de faire:

boost::thread_group     m_Threads;
boost::asio::io_service m_IoService;
boost::barrier          m_Barrier(numThreads);

for( unsigned int i = 0; i < numThreads; ++i )
{
    m_Threads.create_thread(
        [&]()
        {
            for(;;)
            {
                m_IoService.run();

                if( m_Barrier.wait() )  // will only return true for 1 thread
                {
                    m_IoService.reset();
                }
                m_Barrier.wait();
            }
        });
}

m_IoService.stop();
m_Threads.interrupt_all();
m_Threads.join_all();

Tout semble fonctionner correctement si je viens de mettre m_IoService.run() dans une boucle infinie (dont la documentation semble indiquer devrait pas être le cas). Quelle est la corriger?

source d'informationauteur David