Читаем C# 4.0 полное руководство - 2011 полностью

Рассмотрим следующую ситуацию. ПотокГвыполняется в кодовом блокеlock,и ему требуется доступ к ресурсуR,который временно недоступен. Что же тогда делать потоку7?Если потокГвойдет в организованный в той или иной форме цикл опроса, ожидая освобождения ресурсаR,то тем самым он свяжет соответствующий объект, блокируя доступ к нему других потоков. Это далеко не самое оптимальное решение, поскольку оно лишает отчасти преимуществ программирования для многопоточной

среды. Более совершенное решение заключается в том, чтобы временно освободить объект и тем самым дать возможность выполняться другим потокам. Такой подход основывается на некоторой форме сообщения между потоками, благодаря которому один поток может уведомлять другой о том, что он заблокирован и что другой поток может возобновить свое выполнение. Сообщение между потоками организуется в C# с помощью методовWait , Pulse () иPulseAll .

МетодыWait, Pulse и PulseAll определены в классеMonitorи могут вызываться только из заблокированного фрагмента блока. Они применяются следующим образом. Когда выполнение потока временно заблокировано, он вызывает методWait. В итоге поток переходит в состояние ожидания, а блокировка с соответствующего объекта снимается, что дает возможность использовать этот объект в другом потоке. В дальнейшем ожидающий поток активизируется, когда другой поток войдет в аналогичное состояние блокировки, и вызывает метод Pulse или PulseAll . При вызове метода Pulse возобновляется выполнение первого потока, ожидающего своей очереди на получение блокировки. А вызов метода PulseAll сигнализирует о снятии блокировки всем ожидающим потокам.

Ниже приведены две наиболее часто используемые формы методаWait .

public static bool Wait(objectobj)

public static bool Wait(objectobj,intмиллисекунд_простоя)

В первой форме ожидание длится вплоть до уведомления об освобождении объекта, а во второй форме — как до уведомления об освобождении объекта, так и до истечения периода времени, на который указывает количествомиллисекунд_простоя.В обеих формахobjобозначает объект, освобождение которого ожидается.

Ниже приведены общие формы методовPulse иPulseAll:

public static void Pulse(objectobj)public static void PulseAll(objectobj)

гдеobjобозначает освобождаемый объект.

Если методыWait,Pulse nPulseAllвызываются из кода, находящегося за пределами синхронизированного кода, например из блокаlock,то генерируется исключениеSynchronizationLockException.

Пример использования методов Wait и Pulse

Перейти на страницу:

Похожие книги

Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

Программирование, программы, базы данных / ОС и Сети / Книги по IT