Синхронизация с помощью атрибута [Synchronization]

Синхронизация с помощью атрибута [Synchronization]

Последним из рассмотренных здесь примитивов синхронизации будет атрибут [Synchronization], который определяется в пространстве имен System.Runtime.Remoting.Contexts. Этот атрибут уровня класса для безопасности потока эффективно блокирует весь программный код членов экземпляра. Когда среда CLR размещает объект, имеющий атрибут [Synchronization], она помещает этот объект в рамки синхронизированного контекста. Вы должны помнить из главы 13, что объекты, которые не должны покидать контекстные границы, являются производными от ContextBoundObject. Поэтому, чтобы сделать тип класса Printer устойчивым в отношении потоков (без добавления программного кода защиты потоков вручную), следует изменить соответствующее определение так.

using System.Runtime.Remoting.Contexts;

...

// Все методы Printer теперь потокоустойчивы!

[Synchronization]

public class Printer: СontextBoundObject {

 public void PrintNumbers() {

 …

 }

}

Этот подход можно назвать способом создания потокоустойчивого программного кода для ленивых, поскольку здесь не требуется выяснять, какие фрагменты типа могут испытывать влияние внешних потоков. Главным недостатком этого подхода является то, что даже если какой-то метод и не испытывает влияния внешних потоков, среда CLR все равно блокирует обращение к этому методу. Очевидно, это может ухудшить общие характеристики функционирования типа, так что используйте указанный подход с осторожностью.

Итак, мы с вами обсудили целый ряд подходов к решению вопроса синхронизированного доступа к общим блокам данных. Будьте уверены, в пространстве имен System.Threading есть и другие типы, которые я настоятельно рекомендую вам постепенно исследовать. В завершение этой главы, посвященной программированию потоков, давайте рассмотрим три: дополнительных типа: TimerCallback, Timer и ThreadPool.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

1 Синхронизация данных 

Из книги Удаленная работа на компьютере: как работать из дома комфортно и эффективно автора Клименко Роман Александрович

1 Синхронизация данных  Итак, определимся. Вы перспективный работник успевающей компании. Вам необходимо всегда иметь при себе самые последние версии каких-то документов. Вам часто приходится изменять документы, причем на разных компьютерах. И все это вы обязаны делать


Ограничение использования атрибута

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Ограничение использования атрибута По умолчанию пользовательские атрибуты могут применяться к любой части программного кода (к методам, классам, свойствам и т.д.). Поэтому, если только это имеет смысл, можно использовать VehicleDescription для определения (среди прочего) методов,


Синхронизация с помощью ключевого слова lock в C#

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Синхронизация с помощью ключевого слова lock в C# Первой из возможностей, которую вы можете применить в C# для синхронизации доступа к совместно используемым ресурсам, является использование ключевого слова lock. Это ключевое слово позволяет определить контекст операторов,


Синхронизация с помощью типа System.Threading.Monitor

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Синхронизация с помощью типа System.Threading.Monitor Оператор C# lock на самом деле является лишь ключевым словом, обозначающим использование типа класса System.Threading.Monitor. После обработки компилятором C# контекст блокировки превращается в следующее (вы можете убедиться в этом с помощью


Синхронизация с помощью типа System.Threading.Interlocked

Из книги 500 лучших программ для Windows автора Уваров Сергей Сергеевич

Синхронизация с помощью типа System.Threading.Interlocked В это всегда верится с трудом, пока вы не проверите соответствующий программный код CIL, но и операции присваивания, и базовые арифметические операции не являются атомарными. Поэтому в пространстве имен System.Threading предлагается


Роль атрибута AutoEventWireUp

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

Роль атрибута AutoEventWireUp Чтобы обработать события для страницы, нужно добавить в блок ‹script› или файл с внешним кодом поддержки подходящий обработчик события. В отличие от ASP.NET 1.x. теперь не требуется вводить всю программную логику события вручную. Нужна только определить


Повторное объявление функции как атрибута

Из книги Компьютерная обработка звука автора Загуменнов Александр Петрович

Повторное объявление функции как атрибута Повторные объявления позволяют активно применять один из центральных принципов модульности - принцип Унифицированного Доступа (Uniform Access).Напомним (см. лекцию 3), что этот принцип утверждает (первоначально в менее технических


Повторное объявление функции как атрибута

Из книги Секреты приложений Google автора Балуев Денис

Повторное объявление функции как атрибута Правило Утверждения Переобъявления нуждается в небольшом дополнении ввиду возможности при повторном объявлении задать функцию как атрибут. Что произойдет с предусловием функции и ее постусловием, если таковые имелись?Атрибут


Синхронизация куч

Из книги QT 4: программирование GUI на С++ автора Бланшет Жасмин

Синхронизация куч В NT для синхронизации доступа к кучам (глава 5) предусмотрены две функции — HeapLock и HeapUnlock. В каждой из этих функций единственным аргументом является дескриптор. Эти функции удобно применять в тех случаях, когда используется флаг HEAP_NO_SERIALIZE, или когда


Синхронизация данных

Из книги автора

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


13.2. Синхронизация потоков

Из книги автора

13.2. Синхронизация потоков Почему необходима синхронизация? Потому что из-за «чередования» операций доступ к переменным и другим сущностям может осуществляться в порядке, который не удается установить путем чтения исходного текста отдельных потоков. Два и более потоков,


13.2.1. Синхронизация с помощью критических секций

Из книги автора

13.2.1. Синхронизация с помощью критических секций Простейший способ синхронизации дают критические секции. Когда поток входит в критическую секцию программы, гарантируется, что никакой другой поток не войдет в нее, пока первый не выйдет.Если акцессору Thread.critical присвоить


Синхронизация

Из книги автора

Синхронизация При совместном использовании нескольких различных устройств важно обеспечить их полную синхронизацию. Работа всего оборудования должна опираться на одинаковую информацию о времени, а обслуживающие программы – уметь работать с разнообразными типами


Синхронизация

Из книги автора

Синхронизация Иногда очень сложно отказаться от работы со старыми программами. По разным причинам – многие «прикипели» к интерфейсу любимого электронного календаря, где-то та или иная программа является корпоративным стандартом… Но это совсем не значит, что от


Синхронизация

Из книги автора

Синхронизация Для того чтобы фотографии любого вашего альбома прямо из Picasa появились в Интернете на сервисе Picasa Web Albums, необходимо совершить всего два простых действия. Во-первых, щелкнуть на ссылке «Веб-альбомы» над строкой поиска и ввести данные своей учетной записи


Синхронизация потоков

Из книги автора

Синхронизация потоков Обычным требованием для многопоточных приложений является синхронизация работы нескольких потоков. Для этого в Qt предусмотрены следующие классы: QMutex, QReadWriteLock, QSemaphore и QWaitCondition.Класс QMutex обеспечивает такую защиту переменной или участка