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 tabelprivate 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.