Hola a todos,
El capitulo de hoy tratará sobre como crear threads y poder aprovechar nuestros procesadores de N cores.
Hay varias formas de usar threads, pero la más usual es atacar a la API de windows y "pedirle" que nos cree los threads. Como se hace ?? Sencillo, creo que nada mejor que un ejemplo para verlo claro.
DWORD Cont=0; // Variable compartida
DWORD WINAPI incrementar(LPVOID param)
{
DWORD n = *(DWORD*)param;
int i;
for( int i = 0 ; i < n ; i++)
{
Cont++;
cout << "Contador sumando = " << Cont << "\n";
}
return 0;
}
DWORD WINAPI decrementar(LPVOID param)
{
DWORD n = *(DWORD*)param;
for( int i = 0 ; i < n ; i++)
{
Cont--;
cout << "Contador restando = " << Cont << "\n";
}
return 0;
}
int main(int argc, char *argv[]) {
DWORD TIdi,TIdd;
HANDLE THandlei,THandled;
int param = 100;
//Creamos dos threads
THandlei = CreateThread(NULL,0,incrementar,¶m,0,&TIdi);
THandled = CreateThread(NULL,0,decrementar,¶m,0,&TIdd);
cout << "Contador = " << Cont << "\n";
//Esperamos a que acaben todos los threads
WaitForSingleObject(THandlei,INFINITE);
WaitForSingleObject(THandled,INFINITE);
//Eliminamos los threads
CloseHandle(THandlei);
CloseHandle(THandled);
cout << "Contador = " << Cont << "\n";
system("PAUSE");
}
Tendreis que tener el archivo windows.h incluido para que os funcione.
Vereis que si lo ejecutais la traza que os dará será bastante curiosa.
Si quisieramos crear más threads solo tendriamos que usar más CreateThread,WaitForSingleObject y CloseHandle.
En el math engine, os enseñaré como implementarlo con un número arbitario de threads mediante vectores de handlers de threads y observareis que la mejora de rendimiento es escalofriante.
Espero que os haya gustado y hayais aprendido.
Nos vemos
0 comentarios :
Publicar un comentario