Ejemplo_5.cpp
Division de trabajo con std::thread// Division de trabajo con std::thread #include <iostream> #include <thread> #include <vector> #include <mutex> const int N = 100; std::vector<int> datos(N); // Declara el vector sin inicializar int sumaTotal = 0; std::mutex mtx; void inicializarDatos() { for (int i = 0; i < N; ++i) { datos[i] = 1; // llena el vector con valores 1 } } void sumarParte(int inicio, int fin) { int suma = 0; for (int i = inicio; i < fin; ++i) { suma += datos[i]; } std::lock_guard<std::mutex> lock(mtx); sumaTotal += suma; } int main() { inicializarDatos(); // inicializa los datos del vector int numHilos = 4; int tamParte = N / numHilos; std::vector<std::thread> hilos; for (int i = 0; i < numHilos; ++i) { int inicio = i * tamParte; int fin = (i == numHilos - 1) ? N : inicio + tamParte; hilos.emplace_back(sumarParte, inicio, fin); } for (auto& hilo : hilos) { hilo.join(); } std::cout << "Suma total: " << sumaTotal << "\n"; return 0; }
Leave a Comment