Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Определение контекстно-зависимых объектов



Давайте предположим, что требуется определить класс (SportsCarTS) так, чтобы он

автоматически являлся безопасным к потокам по своей природе, даже без размещения

внутри реализации его членов жестко закодированной логики синхронизации потоков.

Чтобы получить такой класс, достаточно унаследовать его от ContextBoundObject и

применить к нему атрибут [Synchronization], как показано ниже.

using System.Runtime.Remoting.Contexts;

// Этот контекстно-зависимый тип будет загружаться только

// в синхронизированный (т.е. безопасный к потокам) контекст.

[Synchronization]

public class SportsCarTS: ContextBoundObject

{}

Типы, которые сопровождаются атрибутом [Synchronization], всегда загружаются в безопасный к потокам контекст. Зная о специальных контекстных потребностях

класса MyThreadSafeObject, давайте представим, какие проблемы будут возникать

в случае перемещения соответствующего объекта из синхронизированного контекста

в не синхронизированный. Объект тут же перестанет быть безопасным к потокам и,

следовательно, станет кандидатом на массовое повреждение данных, поскольку тогда

к нему будет пытаться получить доступ одновременно множество потоков. За счет

наследования SportsCarTS от ContextBoundObject обеспечивается гарантия того, что

CLR-среда никогда не будет пытаться перемещать объекты SportsCarTS за пределы

синхронизированного контекста.





Дата публикования: 2015-07-22; Прочитано: 174 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...