Главная » Просмотр файлов » Межпроцессорное взаимодействие и многопоточность в .NET (реферат)

Межпроцессорное взаимодействие и многопоточность в .NET (реферат) (547923), страница 2

Файл №547923 Межпроцессорное взаимодействие и многопоточность в .NET (реферат) (Межпроцессорное взаимодействие и многопоточность в .NET (реферат)) 2 страницаМежпроцессорное взаимодействие и многопоточность в .NET (реферат) (547923) страница 22015-08-23СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

class Test

{

static void Main()

{

//Создаем главный и фоновый потоки

BackgroundTest shortTest = new BackgroundTest(10);

Thread foregroundThread =

new Thread(new ThreadStart(shortTest.RunLoop));

foregroundThread.Name = "ForegroundThread";

BackgroundTest longTest = new BackgroundTest(50);

Thread backgroundThread =

new Thread(new ThreadStart(longTest.RunLoop));

backgroundThread.Name = "BackgroundThread";

backgroundThread.IsBackground = true;

//Запускаем потоки

foregroundThread.Start();

backgroundThread.Start();

}

}

class BackgroundTest

{

int maxIterations;

public BackgroundTest(int maxIterations)

{

this.maxIterations = maxIterations;

}

public void RunLoop()

{

String threadName = Thread.CurrentThread.Name;

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

{

//Вывод в консоль

Console.WriteLine("{0} count: {1}",

threadName, i.ToString());

Thread.Sleep(250);

}

Console.WriteLine("{0} finished counting.", threadName);

}

}

Выходная информация:

ForegroundThread count: 4

BackgroundThread count: 4

ForegroundThread count: 5

BackgroundThread count: 5

ForegroundThread count: 6

BackgroundThread count: 6

ForegroundThread count: 7

BackgroundThread count: 7

ForegroundThread count: 8

BackgroundThread count: 8

ForegroundThread count: 9

BackgroundThread count: 9

ForegroundThread finished counting

BackgroundThread count: 10

BackgroundThread count: 11

BackgroundThread count: 12

BackgroundThread count: 13

BackgroundThread count: 14

BackgroundThread count: 15

BackgroundThread count: 16

BackgroundThread count: 17

BackgroundThread count: 18

BackgroundThread count: 19

BackgroundThread finished countin

4) Ключевое слово lock

using System;

using System.Collections.Generic;

using System.Text;

namespace TestMutex

{

class ThreadSafe

{

//Разделяемое данное(может быть изменено в обоих потоках)

static bool done;

//Блокирующий объект

static object locker = new object();

static void Main()

{

new Thread(Go).Start();

Go();

}

static void Go()

{

//Критическая секция(доступна лищь одному потоку

//одновременно, для других потоков блоктруеться)

lock (locker)

{

if (!done)

{

Console.WriteLine("Done");

done = true;

}

}

}

}

}

Выходная информация: Done

Методы

Name

Description

Abort

Вызывает исключение ThreadAbortException в вызвавшем его потоке для того, чтобы начать процесс завершения потока. Вызов этого метода обычно завершает поток.

GetDomain

Возвращает текущий домен, в котором выполняется текущий поток.

GetDomainID

Возвращает уникальный идентификатор домена приложения.

Interrupt

Прерывает работу потока, находящегося в состоянии WaitSleepJoin.

Join

Блокирует вызывающий поток до завершения потока.

ResetAbort

Отменяет метод Abort, запрошенный для текущего потока.

Resume

Возобновляет приостановленную работу потока.

Sleep

Блокирует текущий поток на заданное количество миллисекунд.

Start

Вынуждает операционную систему изменить состояние текущего экземпляра на ThreadState.Running.

Suspend

Приостанавливает работу потока; если работа потока уже приостановлена, не оказывает влияния.



Определение:

[C#]

public void Abort();

public void Abort(object); (object – поток, который необходимо завершить)

public void Interrupt(); ( Если этот поток не является заблокированным в данный момент в состоянии ожидания, бездействия или присоединения, его работа будет прервана, когда он начнет блокироваться.)

public void Join();

public bool Join(int); ( Блокирует вызывающий поток до завершения потока или до момента истечения заданного времени. int - время)

public bool Join(TimeSpan); ( Блокирует вызывающий поток до завершения потока или до момента истечения заданного времени.TimeSpan - время)

public void Resume();

public void Start(); (Когда поток находится в состоянии Running, операционная система может распланировать его для выполнения. Когда поток начинает выполнение, конструктору поставляется делегат ThreadStart для потока, вызвавшего его методы. Если поток завершился, он не может быть запущен заново другим вызовом Start.)

public void Suspend(); (Если работа потока уже приостановлена, этот метод не даст никакого результата.)

Примеры:

  1. Start(), Sleep()

using System;

using System.Threading;

public class ThreadWork

{

public static void DoWork()

{

//Три итерации вывода на консоль в дочернем потоке

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

{

Console.WriteLine("Working thread...");

Thread.Sleep(100);

}

}

}

class ThreadTest

{

public static void Main()

{

//Создаем и запускаем поток

ThreadStart myThreadDelegate = new ThreadStart(ThreadWork.DoWork);

Thread myThread = new Thread(myThreadDelegate);

myThread.Start();

//Три итерации вывода на консоль в главном потоке

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

{

Console.WriteLine("In main.");

Thread.Sleep(100);

}

}

}

Выходная информация:

In main

Working thread…

In main

Working thread…

In main

Working thread…

  1. Resume()

using System;

using System.Threading;

class IsThreadPool

{

static void Main()

{

AutoResetEvent autoEvent = new AutoResetEvent(false);

//Запускаем дочерний поток

Thread regularThread =

new Thread(new ThreadStart(ThreadMethod));

regularThread.Start();

ThreadPool.QueueUserWorkItem(new WaitCallback(WorkMethod),

autoEvent);

//Ждем окончания главного потока

regularThread.Join();

//Ждем окончания фонового потока

autoEvent.WaitOne();

}

static void ThreadMethod()

{

Console.WriteLine("ThreadOne, executing ThreadMethod, " +

"is {0}from the thread pool.",

Thread.CurrentThread.IsThreadPoolThread ? "" : "not ");

}

static void WorkMethod(object stateInfo)

{

//Вывод на консоль

Console.WriteLine("ThreadTwo, executing WorkMethod, " +

"is {0}from the thread pool.",

Thread.CurrentThread.IsThreadPoolThread ? "" : "not ");

//Сигнализируем что поток завершил работу

((AutoResetEvent)stateInfo).Set();

}

}

Выходная информация:

ThreadOne, executing ThreadMethod, is not from the thread pool

ThreadTwo, executing WorkMethod, is from the thread pool

  1. Interrupt(), Sleep(), SpinWait(), Join()

using System;

using System.Threading;

class ThreadInterrupt

{

static void Main()

{

StayAwake stayAwake = new StayAwake();

Thread newThread =

new Thread(new ThreadStart(stayAwake.ThreadMethod));

newThread.Start();

//Следующая строка сгенерит исключение в ThreadMethod

//если newThread блокирован или будет блокирован в будущем

newThread.Interrupt();

Console.WriteLine("Main thread calls Interrupt on newThread.");

//Говорим newThread спать

stayAwake.SleepSwitch = true;

//Ждем завершения newThread

newThread.Join();

}

}

class StayAwake

{

bool sleepSwitch = false;

public bool SleepSwitch

{

set { sleepSwitch = value; }

}

public StayAwake() { }

public void ThreadMethod()

{

Console.WriteLine("newThread is executing ThreadMethod.");

while (!sleepSwitch)

{

//Используем SpinWait для демонстрации эффекта

//вызова Interrupt в запущенном потоке

Thread.SpinWait(10000000);

}

try

{

Console.WriteLine("newThread going to sleep.");

//Когда newThread входит в слип, генерится исключение

// ThreadInterruptedException

Thread.Sleep(Timeout.Infinite);

}

catch (ThreadInterruptedException e)

{

Console.WriteLine("newThread cannot go to sleep - " +

"interrupted by main thread.");

}

}

}

Выходная информация:

Работа программы заканчивается исключением ThreadInterruptedException, когда поток выводиться из периода ожидания, так как производиться попытка вызвать поток метод sleep, после того как он был прерван методом interrupt.



Класс Process

Общая информация.

Описание:

Позволяет проанализировать процессы, выполняющиеся на данной машине (локальной или удаленной). Предлагает члены, которые позволяют запускать и останавливать процессы программными средствами, устанавливать уровни приоритета и получать список активных потоков или загруженных модулей, выполняемых в рамках данного процесса.

(Process как объект ядра подробно описан в [8])

Иерархия:

System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Diagnostics.Process

Определение:

[C#]

public Process ()

Потокобезопасность:

Этот тип можно использовать в многопоточных операциях.



Process – составляющие

Свойства

Name

Description

BasePriority

Приоритет процесса

ExitCode

Устанавливается по завершению процесса

ExitTime

Время завершения процесса

Handle

Возвращает дескриптор процесса

HandleCount

Число дескрипторов открытых процессом

Id

Уникальный id процесса

MachineName

Имя ЭВМ

MainModule

Главный модуль процесса

Modules

Набор модулей запущенных в рамках данного процесса

PriorityClass

Позволяет изменить базовый приоритет процесса

ProcessName

Имя процесса

StartTime

Время начала работы данного процесса

Threads

Коллекция потока данного процесса

Методы

Name

Description

GetCurrentProcess

Получить текущий процесс

GetProcesses

Получает набор процессов запущенных на текущей машине

GetProcessesByName

Получает набор процессов запущенных на соответствующей ЭВМ

Kill

Останавливает процесс

Start

Начать выполнение процесса

Примеры:

  1. Демонстрация работы с классом Process (печатаем текстовый файл в отдельном процессе)

using System;

Характеристики

Список файлов учебной работы

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6390
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее