Герберт Шилдт - C# 4.0 - полное руководство

Здесь есть возможность читать онлайн «Герберт Шилдт - C# 4.0 - полное руководство» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва -- Киев, Год выпуска: 2011, ISBN: 2011, Издательство: ООО И.Д. Вильямс, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

C# 4.0: полное руководство: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «C# 4.0: полное руководство»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.
Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

C# 4.0: полное руководство — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «C# 4.0: полное руководство», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

public Semaphore(int initialCount, int maximumCount, string имя, out bool createdNew)

В обеих формах имя обозначает конкретное имя, передаваемое конструктору. Если в первой форме семафор, на который указывает имя, еще не существует, то он создается с помощью значений, определяемых параметрами initialCount и maximumCount. А если он уже существует, то значения параметров initialCount и maximumCount игнорируются. После возврата из второй формы конструктора параметр createdNew будет иметь логическое значение true, если семафор был создан. В этом случае значения параметров ini tialCount и maximumCount используются для создания семафора. Если же параметр createdNew будет иметь логическое значение false, значит, семафор уже существует и значения параметров initialCount и maximumCount игнорируются. Существует и третья форма конструктора класса Semaphore, в которой допускается указывать управляющий доступом объект типа SemaphoreSecurity. С помощью именованных семафоров можно синхронизировать взаимодействие процессов.

Применение событий

Для синхронизации в C# предусмотрен еще один тип объекта: событие. Существуют две разновидности событий: устанавливаемые в исходное состояние вручную и автоматически. Они поддерживаются в классах ManualResetEventи AutoResetEventсоответственно. Эти классы являются производными от класса EventWaitHandle, находящегося на верхнем уровне иерархии классов, и применяются в тех случаях, когда один поток ожидает появления некоторого события в другом потоке. Как только такое событие появляется, второй поток уведомляет о нем первый поток, позволяя тем самым возобновить его выполнение.

Ниже приведены конструкторы классов ManualResetEventи AutoResetEvent.

public ManualResetEvent(bool initialState)

public AutoResetEvent(bool initialState)

Если в обеих формах параметр initialState имеет логическое значение true, то о событии первоначально уведомляется. А если он имеет логическое значение false, то о событии первоначально не уведомляется.

Применяются события очень просто. Так, для события типа ManualResetEventпорядок применения следующий. Поток, ожидающий некоторое событие, вызывает метод WaitOne()для событийного объекта, представляющего данное событие. Если событийный объект находится в сигнальном состоянии, то происходит немедленный возврат из метода WaitOne(). В противном случае выполнение вызывающего потока приостанавливается до тех пор, пока не будет получено уведомление о событии. Как только событие произойдет в другом потоке, этот поток установит событийный объект в сигнальное состояние, вызвав метод Set(). Поэтому метод Set()следует рассматривать как уведомляющий о том, что событие произошло. После установки событийного объекта в сигнальное состояние произойдет немедленный возврат из метода WaitOne(), и первый поток возобновит свое выполнение. А в результате вызова метода Reset()событийный объект возвращается в несигнальное состояние.

Событие типа AutoResetEventотличается от события типа ManualResetEventлишь способом установки в исходное состояние. Если для события типа ManualResetEventсобытийный объект остается в сигнальном состоянии до тех пор, пока не будет вызван метод Reset(), то для события типа AutoResetEventсобытийный объект автоматически переходит в несигнальное состояние, как только поток, ожидающий это событие, получит уведомление о нем и возобновит свое выполнение. Поэтому если применяется событие типа AutoResetEvent, то вызывать метод Reset()необязательно.

В приведенном ниже примере программы демонстрируется применение события типа ManualResetEvent.

// Использовать событийный объект, устанавливаемый

// в исходное состояние вручную.

using System;

using System.Threading;

// Этот поток уведомляет о том, что событие передано его конструктору,

class MyThread {

public Thread Thrd;

ManualResetEvent mre;

public MyThread(string name, ManualResetEvent evt) {

Thrd = new Thread(this.Run);

Thrd.Name = name;

mre = evt;

Thrd.Start();

}

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

void Run() {

Console.WriteLine("Внутри потока " + Thrd.Name);

for(int i=0; i<5; i++) {

Console.WriteLine(Thrd.Name);

Thread.Sleep(500) ;

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «C# 4.0: полное руководство»

Представляем Вашему вниманию похожие книги на «C# 4.0: полное руководство» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «C# 4.0: полное руководство»

Обсуждение, отзывы о книге «C# 4.0: полное руководство» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x