Ejemplo_5.cpp
Division de trabajo con std::threadTomasOrtellado
c_cpp
9 months ago
1.1 kB
4
Indexable
// 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;
}
Editor is loading...
Leave a Comment