Межпроцессорное взаимодействие и многопоточность в .NET (реферат)
Описание файла
Документ из архива "Межпроцессорное взаимодействие и многопоточность в .NET (реферат)", который расположен в категории "". Всё это находится в предмете "параллельные системы и параллельные вычисления" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "параллельные системы и параллельные вычисления" в общих файлах.
Онлайн просмотр документа "Межпроцессорное взаимодействие и многопоточность в .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;