необходим программа,которая будет сортировать массив 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)
{
}
}
}