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

Когда же в коде больше не требуется владеть мьютексом, он освобождается посредством вызова методаReleaseMutex , форма которого приведена ниже.

public void ReleaseMutex

В этой форме методReleaseMutex освобождает мьютекс, для которого он был вызван, что дает возможность другому потоку получить данный мьютекс.

Для применения мьютекса с целью синхронизировать доступ к общему ресурсу упомянутые выше методыWaitOne иReleaseMutex используются так, как показано в приведенном ниже фрагменте кода.

Mutex myMtx = new Mutex;

// ...

myMtx.WaitOne ; // ожидать получения мьютекса // Получить доступ к общему ресурсу.

myMtx.ReleaseMutex; // освободить мьютекс

При вызове методаWaitOne выполнение соответствующего потока приостанавливается до тех пор, пока не будет получен мьютекс. А при вызове методаReleaseMutex мьютекс освобождается и затем может быть получен другим потоком. Благодаря такому подходу к синхронизации одновременный доступ к общему ресурсу ограничивается только одним потоком.

В приведенном ниже примере программы описанный выше механизм синхронизации демонстрируется на практике. В этой программе создаются два потока в виде классовIncThreadn DecThread,которым требуется доступ к общему ресурсу: переменнойSharedRes . Count.В потокеIncThreadпеременнаяSharedRes . Countинкрементируется, а в потокеDecThread— декрементируется. Во избежание одновременного доступа обоих потоков к общему ресурсуSharedRes . Countэтот доступ синхронизируется мьютексомMtx,также являющимся членом классаSharedRes.

// Применить мьютекс.

using System;

using System.Threading;

//В этом классе содержится общий ресурс(переменная Count),

// а также мьютекс (Mtx), управляющий доступом к ней. class SharedRes {

public static int Count = 0;

public static Mutex Mtx = new Mutex;

}

// В этом потоке переменная SharedRes.Count инкрементируется, class IncThread { int num;

public Thread Thrd;

public IncThread(string name, int n) {

Thrd = new Thread(this.Run); num = n;

Thrd.Name = name;

Thrd.Start;

}

// Точка входа в поток, void Run    {

Console.WriteLine(Thrd.Name + " ожидает мьютекс.");

// Получить мьютекс.

SharedRes.Mtx.WaitOne;

Console.WriteLine(Thrd.Name + " получает мьютекс."); do {

Thread.Sleep (500);

SharedRes.Count++;

Console.WriteLine("В потоке " + Thrd.Name +

", SharedRes.Count = " + SharedRes.Count);

num— ;

} while(num > 0);

Console.WriteLine(Thrd.Name + " освобождает мьютекс.");

// Освободить мьютекс.

SharedRes.Mtx.ReleaseMutex;

}

}

// В этом потоке переменная SharedRes.Count декрементируется, class DecThread { int num;

public Thread Thrd;

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

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

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