Файл: Параллель5 реализовать диспетчеризацию потоков.docx

Добавлен: 13.02.2019

Просмотров: 312

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Лабораторная работа №5 («Диспетчеризация потоков»)

Золотых Светлана, 2161121

Задание: реализовать диспетчеризацию потоков

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

namespace Disp

{

class Program

{

//создание события с ложным значением для реализации нескольких потоков

static System.Threading.ManualResetEvent manual = new System.Threading.ManualResetEvent(false);

static void Main(string[] args) {

//создание трёх потоков с помощью класса Таск

Task task = Task.Factory.StartNew(() =>

//внешняя операция

{

//метод с номером сервера в качестве параметров

FromServer(1);

});

//вложенная операция

Task.Factory.StartNew(() =>


{ FromServer(2);

});

//вложенная операция

Task.Factory.StartNew(() =>


{

FromServer(3);

});

//потоки освобождаются и продолжают свою работу

manual.Set();

//изменение значений для блокировки

manual.Reset();

//ожидание

System.Threading.Thread.Sleep(1000);

//разблокировка потоков

manual.Set();

Console.ReadLine();

}

static void FromServer(int server)

{

Console.WriteLine("Первый набор данных, полученный с сервера {0}", server);

manual.WaitOne();

System.Threading.Thread.Sleep(1000);

Console.WriteLine("Второй набор данных, полученный с сервера {0}", server);

manual.WaitOne();

Console.WriteLine("Все данные с сервера {0} получены", server);

}

}


Результат:


Вывод:

Консольное приложение, получающее данные с мнимых серверов, позволяет регулировать потоками. Было создано событие ManualResetEvent с ложным значением, которое блокирует все потоки, вызывающие метод WaitOne. Были также использованы методы Set (метод возобновляет работу всех потоков) и Reset (метод блокирует работу потоков). Помимо этого использовался метод Sleep класса Thread для режима «сна» потока.