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

Посмотреть архив целиком







Оглавление





Класс Thread. 4

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

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

Свойства 6

Методы 13

Класс Process 18

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

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

Свойства 19

Методы 19

Класс WaitHandle 22

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

WaitHandleсоставляющие 23

Поля 23

Свойства 23

Методы 23

Класс Mutex 24

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

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

Свойства 25

Методы 25

Класс AutoResetEvent 28

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

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

Методы 29

Класс ManualResetEvent 31

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

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

Методы 32

Класс Monitor 36

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

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

Методы 37

Класс Semaphore 40

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

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

Свойства 40

Методы 41

Список литературы 44





Класс Thread.

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

Описание:

Создает и контролирует поток, задает его приоритет и возвращает его статус.

Список всех членов этого типа представлен в разделе Thread - члены.

Процесс может создавать один или более потоков для выполнения частей программного кода, связанного с процессом. Следует использовать делегат ThreadStart для задания программного кода, выполняемого потоком.

В течение своего существования поток всегда находится в одном или более состояниях, определенных в классе ThreadState. Для потока можно запрашивать планирование уровня приоритета, который определяется классом ThreadPriority, но не гарантируется, что операционная система предоставит его.

Список всех состояний ThreadState:

 

Состояние

Описание состояния


Aborted

Поток находиться в состоянии Stopped


Background

Поток был запущен как фоновый. Данное состояние контролируется свойством Thread.IsBackground


Running

Поток начал работу и он не блокирован


Stopped

Поток завершил работу 


Suspended

Поток ожидает старта 


Unstarted

Поток не начал работу, так как метод Thread.Start не был вызван


WaitSleepJoin

Поток блокирован в результате вызова методов Thread.Wait, Thrad.Sleep, Thread.Join





Таблица изменения состояний:

Действие изменяющее состояние

Состояние

Поток создается общеязыковой средой выполнения

Unstarted

Поток вызывает метод Start

Unstarted

Поток выполняется

Running

Поток вызвал метод Sleep

WaitSleepJoin

Поток вызвал метод Wait

WaitSleepJoin

Поток вызвал метод Join

WaitSleepJoin

Другой поток вызвал метод Interrupt

Running

Поток реагирует на запрос Suspend

Suspended

Другой поток вызвал метод Resume

Running

Поток реагирует на запрос Abort

Stopped

Поток остановлен

Stopped

(Более подробно и всеобъемлюще потоки рассматриваются в [8])

Иерархия:

System.Object
   
System.Threading.Thread

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

[C#]

public sealed class Thread


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

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

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

Примечание: в данном разделе рассмотрены наиболее важные члены класса Thread. (Более полную информацию можно найти в [3, 4, 6])

Свойства

 

Имя

Описание

CurrentThread

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

IsAlive

Возвращает true, если поток стартовал и еще не завершил свою работу. Иначе возвращает false.

IsBackground

Возвращает или задает значение, показывающее, является ли поток фоновым (подробности в примере №3 данного раздела).

Name

Возвращает или задает имя потока.

Priority

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

ThreadState

Возвращает значение, содержащее состояния текущего потока.






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

[C#]


public static Thread CurrentThread {get;}


public bool IsAlive {get;}


public bool IsBackground {get; set;}


public string Name {get; set;}


public ThreadPriority Priority {get; set;}


public ThreadState ThreadState {get;}


Примеры:

1) В следующем примере кода показаны простейшие функциональные возможности работы с потоками.

using System;

using System.Threading;


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

public class ThreadExample

{

//Метод вызываеться когда поток стартует.

//Проходит десять итераций,пишет на консоль

//и выходит

public static void ThreadProc()

{

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

{

Console.WriteLine("ThreadProc: {0}", i);

Thread.Sleep(0);

}

}


public static void Main()

{

Console.WriteLine("Main thread: Start a second thread.");

//Создаем новый поток. В качестве входного параметра

//передаем конструктору делегат на функцию

Thread t = new Thread(new ThreadStart(ThreadProc));

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

t.Start();

//Thread.Sleep(0);


//Четыре итерации вывода на консоль

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

{

Console.WriteLine("Main thread: Do some work.");

Thread.Sleep(0);

}


Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.");

//Вызоваем join для того чтоподождать окончания работы ThreadProc

t.Join();

Console.WriteLine("Main thread: ThreadProc.Join has returned. Press Enter to end program.");

Console.ReadLine();

}

}



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


Этот код формирует выходные данные, подобные приведенным ниже:


Main thread: Start a second thread.

Main thread: Do some work.

ThreadProc: 0

Main thread: Do some work.

ThreadProc: 1

Main thread: Do some work.

ThreadProc: 2

Main thread: Do some work.

ThreadProc: 3

Main thread: Call Join(), to wait until ThreadProc ends.

ThreadProc: 4

ThreadProc: 5

ThreadProc: 6

ThreadProc: 7

ThreadProc: 8

ThreadProc: 9

Main thread: ThreadProc.Join has returned. Press Enter to end program.

2)Пример изменения и использования свойств Priotiry, Name, CurrentThread

using System;

using System.Threading;


class Test

{

static void Main()

{

PriorityTest priorityTest = new PriorityTest();

ThreadStart startDelegate =

new ThreadStart(priorityTest.ThreadMethod);


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

Thread threadOne = new Thread(startDelegate);

threadOne.Name = "ThreadOne";

Thread threadTwo = new Thread(startDelegate);

threadTwo.Name = "ThreadTwo";

//Выставляем приоритет

threadTwo.Priority = ThreadPriority.BelowNormal;

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

threadOne.Start();

threadTwo.Start();


// Позвляем считать в течение 10 секунд

Thread.Sleep(10000);

priorityTest.LoopSwitch = false;

}

}


class PriorityTest

{

bool loopSwitch;


public PriorityTest()

{

loopSwitch = true;

}


public bool LoopSwitch

{

set { loopSwitch = value; }

}


public void ThreadMethod()

{

long threadCount = 0;


while (loopSwitch)

{

threadCount++;

}

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

Console.WriteLine("{0} with {1,11} priority " +

"has a count = {2,13}", Thread.CurrentThread.Name,

Thread.CurrentThread.Priority.ToString(),

threadCount.ToString("N0"));

}

}

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

ThreadTwo with BelowNormal priority has a count = 1 223 260 335

ThreadOne with Normal priority has a count = 1 293 215 035



3) Создание потоков в фоновом режиме. Использование свойства IsBackground.

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

Фоновые потоки (background) рассматриваются средой CLR, как возобновляемые ветви выполнения, которыми можно пренебречь в любой момент времени (даже при выполнении ими своих задач). Поэтому, когда все приоритетные потоки завершаются, все фоновые потоки будут завершены автоматически в результате выгрузки домена приложения (больше информации можно получить в [4])


using System;

using System.Threading;


class Test

{

static void Main()

{

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

BackgroundTest shortTest = new BackgroundTest(10);

Thread foregroundThread =






Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.