Ejemplo_5.cpp

Division de trabajo con std::thread
 avatar
TomasOrtellado
c_cpp
7 days ago
1.1 kB
1
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;
}


Leave a Comment