Главная страница
Навигация по странице:

  • «Синхронизация процессов»

  • Информационные технологии Синхронизация процессов. Трегубова_ИБ-314_лр1. Лабораторная работа 1 Синхронизация процессов по дисциплине Информационные технологии Выполнил студент гр. Иб 314 В. Н. Трегубова


    Скачать 86.49 Kb.
    НазваниеЛабораторная работа 1 Синхронизация процессов по дисциплине Информационные технологии Выполнил студент гр. Иб 314 В. Н. Трегубова
    АнкорИнформационные технологии Синхронизация процессов
    Дата19.05.2022
    Размер86.49 Kb.
    Формат файлаdocx
    Имя файлаТрегубова_ИБ-314_лр1.docx
    ТипЛабораторная работа
    #538400

    Министерство образования и науки Российской Федерации

    Уфимский государственный авиационный технический университет

    Кафедра Вычислительной техники и защиты информации

    Лабораторная работа №1

    «Синхронизация процессов»

    по дисциплине

    «Информационные технологии»

    Выполнил студент гр. ИБ - 314:

    В.Н. Трегубова

    Проверил:

    заведующий кафедрой,

    д.т.н., профессор,

    В. М. Картак

    Уфа 2019

    Задание: необходимо разработать программу, в которой было реализовано два потока (нити). Эти потоки должны запускаться одновременно и сортировать один и тот же массив двумя разными способами:

    1. методом пузырька.

    2. методом выбора максимума.


    Код программы:

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Linq;

    using System.Text;

    using System.Threading.Tasks;

    using System.Threading;

    using System.Windows.Forms;
    namespace WindowsFormsApp3

    {

    public partial class Form1 : Form

    {

    object key = new object();

    private static Semaphore s1;

    private static Semaphore s2;

    private static Semaphore s3;

    int[] mass = new int[10];

    public Form1()

    {

    InitializeComponent();

    }
    private void Form1_Load(object sender, EventArgs e)

    {

    }
    private void button1_Click(object sender, EventArgs e)

    {

    Random rand = new Random();

    listBox1.Items.Clear();

    for (int i = 0; i < 10; i++)

    {

    mass[i] = rand.Next(0, 50);

    listBox1.Items.Add(mass[i]);

    }

    }

    private void Puzyrek()

    {

    s3.WaitOne();

    int a;
    for (int i = 0; i < 10; i++)
    for (int j = i + 1; j < 10; j++)

    {

    if (checkBox1.Checked == true)

    lock (key)

    {

    if (mass[i] > mass[j])

    {

    a = mass[i];

    Thread.Sleep(1);

    mass[i] = mass[j];

    mass[j] = a;

    }

    }

    else

    {

    if (mass[i] > mass[j])

    {

    a = mass[i];

    Thread.Sleep(1);

    mass[i] = mass[j];

    mass[j] = a;

    }

    }

    }
    s1.Release();

    }

    private void ViborMax()

    {

    s3.Release();
    for (int i = 0; i < 10; i++)

    {

    int MAX = i;

    if (checkBox1.Checked == true)

    lock (key)

    {
    for (int j = i + 1; j < 10; j++)

    {

    if (mass[j] < mass[i])

    {

    MAX = j;

    }

    }

    int b = mass[MAX];

    Thread.Sleep(1);

    mass[MAX] = mass[i];

    mass[i] = b;

    }

    else

    {

    for (int j = i + 1; j < 10; j++)

    {

    if (mass[j] < mass[i])

    {

    MAX = j;

    }

    }

    int temp = mass[MAX];

    Thread.Sleep(1);

    mass[MAX] = mass[i];

    mass[i] = temp;

    }

    }
    s2.Release();

    }
    private void button2_Click(object sender, EventArgs e)

    {

    Puzyrek();

    }
    private void button3_Click(object sender, EventArgs e)

    {

    ViborMax();

    }
    private void button4_Click(object sender, EventArgs e)

    {

    s1 = new Semaphore(0, 1);

    s2 = new Semaphore(0, 1);

    s3 = new Semaphore(0, 2);

    Thread myThread = new

    Thread(ViborMax);

    myThread.Start();

    Thread myThread1 = new

    Thread(Puzyrek);

    myThread1.Start();

    s1.WaitOne();

    s2.WaitOne();

    for (int i = 0; i < 10; i++)

    listBox2.Items.Add(mass[i]);

    }
    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)

    {
    }
    private void listBox2_SelectedIndexChanged(object sender, EventArgs e)

    {
    }
    private void checkBox1_CheckedChanged(object sender, EventArgs e)

    {
    }

    }

    }



    Вывод:

    В ходе выполнения лабораторной работы была разработана и реализована программа с 2 потоками, которые выполняются одновременно. Отсортирован один и тот же массив двумя способами:

    1. методом пузырька,

    2. методом выбора максимума.


    написать администратору сайта