![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Давайте предположим, что требуется определить класс (SportsCarTS) так, чтобы он
автоматически являлся безопасным к потокам по своей природе, даже без размещения
внутри реализации его членов жестко закодированной логики синхронизации потоков.
Чтобы получить такой класс, достаточно унаследовать его от ContextBoundObject и
применить к нему атрибут [Synchronization], как показано ниже.
using System.Runtime.Remoting.Contexts;
// Этот контекстно-зависимый тип будет загружаться только
// в синхронизированный (т.е. безопасный к потокам) контекст.
[Synchronization]
public class SportsCarTS: ContextBoundObject
{}
Типы, которые сопровождаются атрибутом [Synchronization], всегда загружаются в безопасный к потокам контекст. Зная о специальных контекстных потребностях
класса MyThreadSafeObject, давайте представим, какие проблемы будут возникать
в случае перемещения соответствующего объекта из синхронизированного контекста
в не синхронизированный. Объект тут же перестанет быть безопасным к потокам и,
следовательно, станет кандидатом на массовое повреждение данных, поскольку тогда
к нему будет пытаться получить доступ одновременно множество потоков. За счет
наследования SportsCarTS от ContextBoundObject обеспечивается гарантия того, что
CLR-среда никогда не будет пытаться перемещать объекты SportsCarTS за пределы
синхронизированного контекста.
Дата публикования: 2015-07-22; Прочитано: 174 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!