Герберт Шилдт - 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: полное руководство», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

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

Интервал:

Закладка:

Сделать

• Остальным потокам, пытающимся получить блокировку того же самого объекта, придется ждать до тех пор, пока объект не окажется в разблокированном состоянии.

• Когда поток выходит из заблокированного фрагмента кода, соответствующий объект разблокируется.

Другой подход к синхронизации потоков

Несмотря на всю простоту и эффективность блокировки кода метода, как показано в приведенном выше примере, такое средство синхронизации оказывается пригодным далеко не всегда. Допустим, что требуется синхронизировать доступ к методу класса, который был создан кем-то другим и сам не синхронизирован. Подобная ситуация вполне возможна при использовании чужого класса, исходный код которого недоступен. В этом случае оператор lockнельзя ввести в соответствующий метод чужого класса. Как же тогда синхронизировать объект такого класса? К счастью, этот вопрос разрешается довольно просто: доступ к объекту может быть заблокирован из внешнего кода по отношению к данному объекту, для чего достаточно указать этот объект в операторе lock. В качестве примера ниже приведен другой вариант реализации предыдущей программы. Обратите внимание на то, что код в методе SumIt()уже не является заблокированным, а объект lockOnбольше не объявляется. Вместо этого вызовы метода SumIt()блокируются в классе MyThread.

// Другой способ блокировки для синхронизации доступа к объекту,

using System;

using System.Threading;

class SumArray {

int sum;

public int SumIt(int[] nums) {

sum =0; // установить исходное значение суммы

for(int i=0; i < nums.Length; i++) {

sum += nums[i];

Console.WriteLine("Текущая сумма для потока " +

Thread.CurrentThread.Name + " равна " + sum);

Thread.Sleep(10); // разрешить переключение задач

}

return sum;

}

}

class MyThread {

public Thread Thrd;

int[] a;

int answer;

/* Создать один объект типа SumArray для всех экземпляров класса MyThread. */

static SumArray sa = new SumArray();

// Сконструировать новый поток,

public MyThread(string name, int[] nums) {

a = nums;

Thrd = new Thread(this.Run);

Thrd.Name = name;

Thrd.Start(); // начать поток

}

// Начать выполнение нового потока,

void Run() {

Console.WriteLine(Thrd.Name + " начат.");

// Заблокировать вызовы метода SumIt().

lock(sa) answer = sa.SumIt(a);

Console.WriteLine("Сумма для потока " + Thrd.Name +

" равна " + answer);

Console.WriteLine(Thrd.Name + " завершен.");

}

}

class Sync {

static void Main() {

int[] a = {1, 2, 3, 4, 5};

MyThread mt1 = new MyThread("Потомок #1", a);

MyThread mt2 = new MyThread("Потомок #2", a);

mt1.Thrd.Join();

mt2.Thrd.Join();

}

}

В данной программе блокируется вызов метода sa.Sum It(), а не сам метод SumIt(). Ниже приведена соответствующая строка кода, в которой осуществляется подобная блокировка.

// Заблокировать вызовы метода SumIt().

lock(sa) answer = sa.SumIt(a);

Объект saявляется закрытым, и поэтому он может быть благополучно заблокирован. При таком подходе к синхронизации потоков данная программа дает такой же правильный результат, как и при первоначальном подходе.

Класс Monitor и блокировка

Ключевое слово lockна самом деле служит в C# быстрым способом доступа к средствам синхронизации, определенным в классе Monitor, который находится в пространстве имен System.Threading. В этом классе определен, в частности, ряд методов для управления синхронизацией. Например, для получения блокировки объекта вызывается метод Enter(), а для снятия блокировки — метод Exit(). Ниже приведены общие формы этих методов:

public static void Enter(object obj)

public static void Exit (object obj)

где obj обозначает синхронизируемый объект. Если же объект недоступен, то после вызова метода Enter()вызывающий поток ожидает до тех пор, пока объект не станет доступным. Тем не менее методы Enter()и Exit()применяются редко, поскольку оператор lockавтоматически предоставляет эквивалентные средства синхронизации потоков. Именно поэтому оператор lockоказывается "более предпочтительным" для получения блокировки объекта при программировании на С#.

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

Интервал:

Закладка:

Сделать

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

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


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

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

x