- •ОПЕРАЦИОННЫЕ СИСТЕМЫ
- •Домен приложения
- •Домен приложения
- •В пространстве имен System.Threading
- •Обзор пространства имен System.Threading
- •Класс Thread. Общая характеристика
- •Нестатические члены класса Thread
- •Interrupt()
- •Создание потока
- •Приоритеты потоков
- •Класс ThreadState
- •Диаграмма состояний потока
- •Синхронизация
- •Класс Monitor и инструкция lock
- •Класс Semaphore используется для управления доступом к пулу ресурсов
- •Семафоры бывают двух типов:
- •public sealed class Mutex : WaitHandle
- •Мьютексы бывают двух типов:
ОПЕРАЦИОННЫЕ СИСТЕМЫ
Вощинская Гильда
Эдгаровна
Домен приложения
Выполнение приложений .NET начинается с запуска .NET Framework. Это процесс со своими потоками, специальными атрибутами и правилами взаимодействия с другими процессами. Приложения .NET выполняются в ОДНОМ процессе. Для этих приложений процесс .NET Framework играет роль, аналогичную роли операционной системы при обеспечении выполнения процессов.
Выполняемые в процессе .NET Framework .NET- приложения также изолируются друг от друга. Средством изоляции .NET-приложений являются домены приложений.
Домен приложения
Домен приложения изолирует (на логическом уровне) выполняемые приложения и используемые в его рамках ресурсы. В процессе .NET Framework может выполняться множества доменов приложений. При этом в рамках одного домена может выполняться множество потоков.
В пространстве имен System.Threading
объявляются типы, которые используются для создания многопоточных приложений.
Interlocked
Monitor
Mutex
Thread
Синхронизация доступа к общим данным
Синхронизация потоковых объектов при
помощи блокировок и управления ожиданием
Синхронизация ПРОЦЕССОВ
Собственно класс потока, работающего в среде выполнения .NET. В текущем домене
приложения с помощью этого класса
создаются новые потоки
ThreadPool |
Класс, предоставляющий средства |
|
|
|
управления набором взаимосвязанных |
|
|
потоков |
Обзор пространства имен System.Threading
ThreadStart |
Класс-делегат для метода, который должен |
||
|
|
быть выполнен перед запуском потока |
|
Timer |
Вариант класса-делегата, который |
|
|
|
|
обеспечивает передачу управления |
|
|
|
некоторой функции-члену (неважно какого |
|
|
|
класса!) в указанное время. Сама процедура |
|
|
|
ожидания выполняется потоком в пуле |
|
|
|
потоков |
TimerCallback
WaitHandle
WaitCallback
Класс-делегат для объектов класса Timer
Объекты – представители этого класса
являются объектами синхронизации
(обеспечивают многократное ожидание).
Делегат, представляющий методы для
рабочих элементов (объектов) класса
ThreadPool
Класс Thread. Общая характеристика
Thread-класс представляет управляемые потоки: создает потоки
и управляет ими — устанавливает приоритет и статус потоков.
Это объектная оболочка вокруг определенного этапа выполнения программы внутри домена приложения.
Статические члены класса Thread
CurrentThread
Sleep()
Свойство. Только для чтения. Возвращает ссылку на поток, выполняемый в настоящее
время
Блокировка выполнения потока на
определенное время
Нестатические члены класса Thread
IsAlive |
Свойство. Если поток запущен, то true |
IsBackground |
Свойство. Работа в фоновом режиме. GC |
|
работает как фоновый поток |
Name
Priority
Свойство. Дружественное текстовое имя
потока. Если поток никак не назван –
значение свойства установлено в null. Поток
может быть поименован единожды. Попытка переименования потока возбуждает исключение
Свойство. Значение приоритета потока. Область значений – значения перечисления
ThreadPriority
ThreadState |
Свойство. Состояние потока. Область |
|
|
|
значений – значения перечисления |
|
|
ThreadState |
Interrupt() |
Нестатические члены |
|
Прерывание работы текущего потока |
||
|
|
|
Join() |
Ожидание появления другого потока (или |
|
|
|
определенного промежутка времени) с |
|
|
последующим завершением |
Resume()
Start()
Suspend()
Abort()
Возобновление выполнения потока после
приостановки
Начало выполнения ранее созданного потока,
представленного делегатом класса ThreadStart Приостановка выполнения потока
Завершение выполнения потока посредством генерации исключения TreadAbortException в
останавливаемом потоке. Это исключение
следует перехватывать для продолжения выполнения оставшихся потоков приложения.
Создание потока
Чтобы создать поток, необходимо создать объект типа Thread. В классе Thread определен следующий конструктор:
public Thread( ThreadStart entryPoint).
Тип ThreadStart – это делегат, определенный в среде
.NET Framework:
public delegate void ThreadStart(). Выполнение созданного потока начнется, когда будет вызван метод Start(). Его определение :
public void Start().
Выполнение потока завершится, когда завершится метод, заданный параметром entryPoint. Если вызвать метод Start() для запущенного на выполнение потока, будет сгенерировано исключение ThreadStartException.
Приоритеты потоков
Среда .NET Framework определяет два типа потоков: Высокоприоритетные и фоновые. Различие между ними в том, что процесс не завершится, пока не завершится выполнение всех его высокоприоритетных потоков, после этого фоновые потоки заканчиваются автоматически.
По умолчанию поток создается как высокоприоритетный. Сделать его фоновым можно, установив свойство
public bool IsBackground{ get;set} в значение true. Каждый поток имеет определенный приоритет. Он задается значениями перечисления ThreadPriority: ThreadPriority.Highest
ThreadPriority.AboveNormal ThreadPriority.Normal // по умолчанию ThreadPriority.BelowNormal ThreadPriority.Lowest .
Пример ThreadPriority