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.