Witam serdecznie. Dostałem takie zadanie aby napisać program który wyszuka minimum w tablicy (wielowątkowo - liczba wątków ustalana na etapie kompilacji). Wykorzystałem tutaj tablice wątków, alokowaną dynamicznie. Tworze nowe wątki poprzez new aczkolwiek nie mam pojęcia jak zrobić żeby program czekał aż wszystkie te wątki sie skończą i dopiero wtedy przeszukał tablice pomocniczą w której znajdują się min znalezione przez każdy wątek. Zamieszczam kod za wszelkie rady będę bardzo wdzięczny :) Czytałem troche o join ale nie mam pojęcia jak tutaj z tego skorzystać. Przy normalnym tworzeniu wątków np: thread t1(xx) thread t2(xxx) nie ma problemu bo wystarczy zrobić t1.join() t2.join().
#include <iostream>
#include <thread>
#include <ctime>
using namespace std;
#define lbwatkow 5
#define N 100
int Tab[N];
int TabMin[lbwatkow];
void Wypelnij();
void MinWatek(int poczatek, int koniec, int nr_watku);
void Szukajmin();
void znajdzmin();
int main()
{
Wypelnij();
Szukajmin();
getchar();
}
void Wypelnij()
{
for (int i = 0; i < N; ++i)
Tab[i] = rand() % 100 - 50;
}
void MinWatek(int pocz, int kon, int nr_watku)
{
int min = Tab[pocz];
for (int i = 0; i < kon; ++i)
{
if (Tab[i] < min)
min = Tab[i];
}
TabMin[nr_watku] = min;
}
void Szukajmin()
{
int Podzialy = N / lbwatkow;
thread TabWatkow[lbwatkow];
thread *wskTab = TabWatkow;
for (int i = 0; i < lbwatkow; ++wskTab, ++i)
{
wskTab = new thread(MinWatek, i*Podzialy, (i + 1)*Podzialy, i); // tworzone nowe watki wraz z podzialami do szukania
}
znajdzmin();
}
void znajdzmin() // szukanie minimum w tablicy min. ktore znalazly watki
{
int min = TabMin[0];
for (int i = 1; i < N; ++i)
{
if (TabMin[i] < min)
min = TabMin[i];
}
cout << "Minimum = " << min << endl;
}