vectores unir suma interseccion intercalar concatenar como array c++ c++11 vector stdvector stdthread

c++ - suma - unir 2 vectores en c



Los hilos en un vector no se pueden unir (1)

vector<thread> threads(1);

Esto crea un hilo que se puede acceder en el índice 0 .

threads.push_back(thread([]{ cout << "Hello" << endl; }));

Esto agrega un segundo hilo que se puede acceder en el índice 1 .

for_each(threads.begin(), threads.end(), mem_fn(&thread::join));

Esto va a llamar join en ambos objetos de thread . Sin embargo, el primero nunca se inició, por lo tanto, no se puede unir.

En su lugar, puede reemplazar los vector<thread> threads(1); con vector<thread> threads; threads.reserve(1); vector<thread> threads; threads.reserve(1); y sigue usando push_back .

Quiero almacenar una colección de hilos en un vector y unirlos a todos antes de salir de mi programa. Recibo el siguiente error al intentar unirme al primer hilo, sin importar cuántos coloque en la colección:

system_error: thread::join failed: No such process

Aquí hay un código simple que demuestra mi problema:

#include <thread> #include <iostream> #include <vector> #include <functional> using std::cout; using std::endl; using std::vector; using std::thread; using std::mem_fn; int main() { vector<thread> threads(1); threads.push_back(thread([]{ cout << "Hello" << endl; })); for_each(threads.begin(), threads.end(), mem_fn(&thread::join)); // also tried --> for(thread &t : threads) t.join() }

Y lo estoy construyendo usando lo siguiente (probé clang ++ 4.2.1 y g ++ 5.3.1):

g++ -o src/thread_test.o -c -std=c++14 src/thread_test.cpp -pthread g++ -o thread_test src/thread_test.o -pthread

Veo muchos ejemplos haciendo esto por Internet. ¿Ha cambiado algo en el contrato de <thread> o <vector> que ha dejado sin ejemplos a estos ejemplos?

NOTA: Como un lado para futuros lectores, terminé agregando el argumento de constructor (1) después de probar la asignación {} , que falla debido a un constructor de copia privada. Al tratar de evitar el constructor de copias terminé asignando hilos no inicializados, error por descuido.