В рамках платформы .NET пространство имен System.Threading предлагает ряд типов, позволяющих строить многопоточные приложения. Вдобавок к типам, с помощью которых можно взаимодействовать с отдельными потоками CLR, в этом пространстве имен определены также типы, обеспечивающие доступ к поддерживаемому средой CLR пулу потоков, простой (не имеющий графического интерфейса) класс Timer и множество типов, предназначенных для поддержки синхронизированного доступа к разделяемым ресурсам. Описания основных членов этого пространства имен приведены табл. 14.1. (Не забывайте о том, что подробности всегда можно найти в документации .NET Framework 2.0 SDK.)
Таблица 14.1.Подборка типов пространства имен System.Threading
| Тип |
Описание |
| Interlocked |
Предлагает атомарные операции для типов, открытых для множества потоков. |
| Monitor |
Обеспечивает синхронизацию объектов потоков с помощью блокировок и ожиданий/сигналов, ключевое слово C# lock использует тип Monitor в фоновом режиме |
| Mutex |
Примитив синхронизации, используемый для синхронизации взаимодействия между границами доменов приложения |
| ParameterizedThreadStart |
Делегат (появившийся только в .NET 2.0), позволяющий потоку вызывать методы с любым числом аргументов |
| Semaphore |
Позволяет ограничить число потоков, которые могут иметь конкурентный доступ к ресурсу или определенному типу ресурсов |
| Thread |
Представляет поток, выполняющийся в среде CLR. С помощью этого типа можно создавать дополнительные потоки в оригинальном домене приложения |
| ThreadPool |
Позволяет взаимодействовать о пулам потоков, управляемым средой CLR в рамках данного процесса |
| ThreadPriority |
Перечень, представляющий уровень приоритета потока (Highest, Normal и т.д.) |
| ThreadStart |
Делегат, используемый для указания метода, вызываемого для данного потока. В отличие от ParameterizedThreadStart, целевые методы ThreadStart должны соответствовать фиксированному шаблону |
| ThreadState |
Перечень, указывающий состояния, допустимые для данного потока (Running, Aborted и т.д.) |
| Timer |
Обеспечивает механизм выполнения метода через заданные интервалы времени |
| TimerCallback |
Делегат, используемый в совокупности с типами Timer |
Класс System.Threading.Thread
Основным в пространстве имен System.Threading является класс Thread. Этот класс представляет собой объектный контейнер отдельной ветви выполнения в конкретном домене приложения. Он определяет ряд методов (как статических, так и общедоступных), которые позволяют создавать новые потоки в текущем домене приложения, а также приостанавливать, останавливать и завершать отдельные потоки. Рассмотрите описания основных статических членов, приведенные в табл. 14.2.
Таблица 14.2.Основные статические члены типа Thread
| Статический член |
Описание |
| CurrentContext |
Доступное только для чтения свойство, возвращающее контекст, в котором выполняется поток в настоящий момент |
| CurrentThread |
Доступное только для чтения свойство, возвращающее ссылку на выполняемый в настоящий момент поток |
| GetDomain() GetDomainID() |
Методы, возвращающие ссылки на текущий домен приложения или идентификатор домена, в котором выполняется текущий поток |
| Sleep() |
Метод, приостанавливающий выполнение текущего потока на указанное время |
Класс Thread также поддерживает набор членов уровня экземпляра. Описания некоторых из этих членов приведены в табл. 14.3.
Таблица 14.3.Члены уровня экземпляра типа Thread
| Член уровня экземпляра |
Описание |
| IsAlive |
Возвращает логическое значение, сообщающее о том, запущен ли данный поток |
| IsBackground |
Читает или устанавливает значение, сообщающее о том, является ли данный поток "фоновым" (дополнительные подробности будут предложены чуть позже) |
| Name |
Позволяет задать понятное строковое имя потока |
| Priority |
Читает или устанавливает приоритет потока, которому может быть назначено значение из перечня ThreadPriority |
| ThreadState |
Читает информацию о состоянии потока, которая может принимать значения из перечня ThreadState |
| Abort() |
Дает указание среде CLR завершить поток как можно быстрее |
| Interrupt() |
Выводит (например, путем активизации) текущий поток из периода ожидания |
| Join() |
Блокирует вызывающий поток до завершения указанного потока (того, для которого вызывается Join()) |
| Resume() |
Возобновляет выполнение приостановленного ранее потока |
| Start() |
Дает указание среде CLR как можно быстрее начать выполнение потока |
| Suspend() |
Приостанавливает выполнение потока. Если поток уже приостановлен, вызов Suspend() игнорируется |
Получение информации об отдельном потоке
Читать дальше