¿Qué es exactamente join () en Boost :: thread? (C ++)

En Java, haría algo como:

Thread t = new MyThread();
t.start();

Comienzo el hilo llamando al método start (). Entonces más tarde puedo hacer algo como:

for (int i = 0; i < limit; ++i)
{
    Thread t = new MyThread();
    t.start();
}

Para crear un grupo de subprocesos y ejecutar el código en el método run ().

Sin embargo, en C ++, no existe el método start (). Usando Boost, si quiero que un hilo comience a ejecutarse, tengo que llamar al método join () para que un hilo se ejecute.

#include <iostream>
#include <boost/thread.hpp>

class Worker
{
public:
    Worker() 
    {
        // the thread is not-a-thread until we call start()
    }

    void start(int N)
    {
        m_Thread = boost::thread(&Worker::processQueue, this, N);
    }

    void join()
    {
        m_Thread.join();
    }

    void processQueue(unsigned N)
    {
        float ms = N * 1e3;
        boost::posix_time::milliseconds workTime(ms);

        std::cout << "Worker: started, will work for "
                  << ms << "ms"
                  << std::endl;

        // We're busy, honest!
        boost::this_thread::sleep(workTime);
        std::cout << "Worker: completed" << std::endl;
    }

private:

    boost::thread m_Thread;
};

int main(int argc, char* argv[])
{
    std::cout << "main: startup" << std::endl;

    Worker worker, w2, w3, w5;

    worker.start(3);
    w2.start(3);
    w3.start(3);
    w5.start(3);

    worker.join();
    w2.join();
    w3.join();
    w5.join();
    for (int i = 0; i < 100; ++i)
    {
        Worker w;
        w.start(3);
        w.join();
    }
    //std::cout << "main: waiting for thread" << std::endl;    

    std::cout << "main: done" << std::endl;

    return 0;
}

En el código anterior, el bucle for para crear 100 subprocesos, normalmente debo usar un boost :: thread_group para agregar la función de subproceso y finalmente ejecutar todo con join_all (). Sin embargo, no sé cómo hacerlo con la función de subproceso que incluye una clase que utiliza varios miembros de la clase.

Por otro lado, el bucle anterior no se comportará como el bucle en Java. Hará que cada subproceso se ejecute secuencialmente, no todos a la vez como los otros subprocesos separados, cuya propia unión () se llama.

¿Qué es exactamente join () en Boost? Además, ayúdame a crear un grupo de hilos que compartan la misma clase.

Respuestas a la pregunta(2)

Su respuesta a la pregunta