He estado buscando en C++ 0x hilos y tienen este código:función de rosca con pasado por el vector de referencia es lento para iniciar
#include <vector>
#include <iostream>
#include <thread>
void TestFunc(const vector<int>& vVec)
{
cout << "in"<<endl;
}
int main()
{
int sizer = 400000000;
vector<int> vTest(sizer);
for(int f=0; f<sizer; f++)
vTest[f] = f;
cout << "V created." << endl;
thread one(TestFunc, vTest);
one.join();
}
Como se puede ver que sólo pasa un vector de un hilo. Lo que no entiendo es que hay una pausa después de que aparece el mensaje "V created". Originalmente esto (supuse) era el vector que se estaba copiando para usar en la función. Para detener esto pasé por referencia, pero esto no hizo diferencia.
La demora parece ser proporcional al tamaño del vector que indica que todavía está copiando (o haciendo algo con la matriz). Si pruebo el mismo experimento sin hilos y llamo directamente a la función, la demora está allí cuando paso por valor pero no cuando paso por referencia como esperaba.
Intenté lo mismo utilizando hilos Boost en lugar de C++ 0x (aunque he leído que son muy parecidos) y obtuve el mismo resultado.
¿Hay alguna razón para este comportamiento o me he perdido algo cegadoramente obvio? Gracias.
Lo siento, publicado el código de prueba equivocado. Corregido Editar: Agregado incluye según lo solicitado.
compilado con: g ++ 44 -std = C++ 0x -lpthread tester.cpp prueba ... como tengo GNU 4.4 instalado al lado del compilador GNU estándar que viene con mi Linux (CentOS -o) que no es compatible con C++ 11.
la parte más cara de TestFunc es la traza, no los parámetros que pasan. parece que C++ 0x no admite la creación de hilos – BruceAdi
@Mahesh: ¿En qué sistema? Esto es solo 400 millones y se ajustará cómodamente en un int de 32 bits. –
@BruceAdi: En C++ 11 hilos son obligatorios según el estándar, y al menos gcc-4.6 los admite, y funcionan, los uso todos los días. – hirschhornsalz