Program ma umożliwić ocenę efektywności pracy wielowątkowej w różnych warunkach w porównaniu z pracą realizowaną w wątku głównym.
Będą sortowane tablice liczb typu double i mierzony czas wykonania wszystkich sortowań.
DateTime t1; //czas rozpoczęcia
DateTime t2; //czas zakończenia
int m = 10000; // rozmiar sortowanych tablic (do zmieniania)
int nt = 8; // ilość tablic do sortowania (do zmieniania)
double[][] tabele1; // tablice do sortowania jednowątkowego
double[][] tabele2; // tablice do sortowania wielowątkowego
Należy poeksperymentować z ilością tablic (nt), a przez to ilością uruchamianych wątków drugoplanowych. Rozmiarem tablic (m) wymusza się odpowiednio długi czas pracy.
Inicjacja tabel
private void btnInitialization_Click(object sender, EventArgs e)
{
Random rnd = new Random();
tabele1 = new double[nt][];
tabele2 = new double[nt][];
for (int i = 0; i < nt; i++)
{
tabele1[i] = new double[m];
tabele2[i] = new double[m];
for (int j = 0; j < m; j++)
{
tabele1[i][j] = 100 * rnd.NextDouble();
tabele2[i][j] = tabele1[i][j];
}
}
}
Wizualizacja czasu pracy
void showing(Label l)
{
l.Text = string.Format("{0} ms", (t2 - t1).TotalMilliseconds);
}
Narzędziowa procedura sortująca tabelę przekazaną jako parametr
void sorter(double[] tab)
{
int n = tab.Length;
bool bylo;
do
{
bylo = false;
for (int i = 1; i < n; i++)
if (tab[i - 1] > tab[i])
{
double m = tab[i - 1];
tab[i - 1] = tab[i];
tab[i] = m;
bylo = true;
}
} while (bylo);
}
Sortowanie w wątku głównym
private void btnSortInMainThread_Click(object sender, EventArgs e)
{
t1 = DateTime.Now;
for (int i = 0; i < nt; i++)
sorter(tabele1[i]);
t2 = DateTime.Now;
showing(label1);
}
Sortowanie w wątkach drugoplanowych
private void btnSortInMultiThread_Click(object sender, EventArgs e)
{
t1 = DateTime.Now;
for (int i = 0; i < nt; i++)
{
Thread thr = new Thread(thrsorter);
thr.Start(tabele2[i]);
}
}
private void thrsorter(object obj)
{
sorter(obj as double[]);
t2 = DateTime.Now;
label2.Invoke( new Action(delegate(){ showing(label2); } ));
}
Każdy wątek zapisuje czas zakończenia pracy, ale na formularzu pozostanie ostatni.