необходим программа,которая будет сортировать массив 2мя потоками одновременно(пузырьком и выбором)

В программе должны использоваться следующие механизмы: • для одновременного запуска процессов необходимо использовать семафор, т.е. поток, который в коде запускается первым, должен ожидать запуск второго потока. • правильность сортировки массива должна быть обеспечена с помощью критических секций. • в программе должна быть предусмотрена возможность отключения критических секций, при этом необходимо показать , что массив будет отсортирован неверно (для увеличения вероятности возникновения ошибки рекомендуется использовать оператор sleep()). • Вывод результата сортировки массива. Массив должен выводиться главным потоком. Он должен ожидать окончание сортировки массива двумя вспомогательными потоками. Ожидание реализовать с помощью семофоров.

Я смог написать коды генерации и сортировки по отдельности, но как это объединить и сделать через потоки не знаю, помогите кто может. В windows form первый раз работаю, поэтому код не очень)

//генерация массива
public void button1_Click(object sender, EventArgs e)
     {
         Random rnd = new Random();
        int num = Convert.ToInt32(textBox1.Text);
         int[] arr = new int[num];
         for (int i = 0; i < num; i++)
         {
             arr[i] = rnd.Next(-100, 100);
             textBox2.Text +=arr[i].ToString()+" ";
         }
     }
//функция сортировки
public void Sort_puzir(int[] arr)
     {
         int num = Convert.ToInt32(textBox1.Text);
         int temp;
         for (int i = 0; i < num - 1; i++)
         {
             for (int j = 0; j < num - i - 1; j++)
             {
                 if (arr[j] > arr[j + 1])
                 {
                     temp = arr[j];
                     arr[j] = arr[j + 1];
                     arr[j + 1] = temp;
                 }
             }
         }
     }
//функция сортировки
     public void Sort_chose(int [] arr)
     {
         int num = Convert.ToInt32(textBox1.Text);
         int min, temp;

         for (int i = 0; i < num - 1; i++)
         {
             min = i;

             for (int j = i + 1; j < num; j++)
             {
                 if (arr[j] < arr[min])
                     min = j;
             }
             temp = arr[i];
             arr[i] = arr[min];
            arr[min] = temp;
         }

     }
//многопоточность
     private void button4_Click(object sender, EventArgs e)
     {
         int num = Convert.ToInt32(textBox1.Text); 
         string s = textBox2.Text;
         string[] arrstring = new string[1];
         if (s != "")
         {
             arrstring = s.Split(' ');
         }
         int[] mas = new int[arrstring.Length - 1];
         for (int i = 0; i < arrstring.Length - 1; i++)
         {
             mas[i] = Convert.ToInt32(arrstring[i]);
         }

         Thread myThread1 = new Thread(() => Sort_puzir(mas));
         myThread1.Start();
         myThread1.Join();
         Thread myThread2 = new Thread(() => Sort_chose(mas));
         myThread2.Start();
         myThread2.Join();
         for (int i = 0; i < num; i++)
             textBox5.Text += mas[i].ToString() + "  ";
     }

     private void textBox1_TextChanged_1(object sender, EventArgs e)
     {

     }
 }
}

Ответы (0 шт):