Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Safonov / AMPN_course_21.pptx
Скачиваний:
139
Добавлен:
16.04.2015
Размер:
215.69 Кб
Скачать

Области приложений и изоляция

Области приложений обеспечивают защиту от отказов в рамках процесса ОС

Каждая область имеет свои собственные

Фильтр необработанных исключений

Набор полномочий “на вершине стека”

Области приложений независимо компилируются и отлаживаются

Граница области приложения для объектов закрыта

(C)Сафонов В.О. 2012

Обработка областей приложений

Области приложений могут создаваться, обрабатываться и удаляться программным путем

CreateDomain создает новую область в процессе ОС

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

ExecuteAssembly исполняет сборку в заданной области приложения

CreateInstance создает экземпляр объекта в

заданной области приложения

DoCallback вызывает функцию-делегат в заданной области приложений

Load загружает сборку в заданную область приложения

(C)Сафонов В.О. 2012

Загрузка приложения в AppDomain

using System;

public class App

{

public static int Main (string[] args)

{

AppDomain child = AppDomain.CreateDomain (“child”, null,null);

return child.ExecuteAssembly(“child.exe”, null, null);

}

}

(C) Сафонов В.О. 2012

Области приложений и выстраивание

Передача ссылок через границы областей приложений требует выстраивания (marshaling)

Оно выполняется явно при запросе свойств области

Может быть выполнено “вручную” с помощью RemotingServices.Marshal

Типы, унаследованные от

System.MarshalByRefObject, ограничены пределами области приложения

Объект, класс которого имеет атрибут [Serializable], не имеет таких ограничений и может быть передан по значению

Остальные типы не могут использовать выстраивание

(C)Сафонов В.О. 2012

Создание и запуск потока

Создание нового экземпляра класса ThreadКонструктор имеет единственный

параметр

Делегат ThreadStart

Делегат ThreadStart содержат ссылку на метод, который должен исполнить данный поток (“функцию потока”)

Запуск потока выполняется методом StartСравните: В Java поток имеет метод run(), который играет роль функции потока.

Запуск выполняется методом start()

Thread

t =

new Thread

(new

ThreadStart(MyThread.ThreadProc));

t.Start();

 

 

 

(C) Сафонов В.О. 2012

Управление классом Thread

Присваивание потоку имени

Свойство Thread.Name

Управление его приоритетом

Свойство Thread.Priority

Проектирование потока

Свойство Thread.IsBackground

Основные и фоновые потоки

t.Name = "My Background Thread"; t.Priority = ThreadPriority.AboveNormal; t.IsBackground = true;

(C) Сафонов В.О. 2012

Управление потоками

Вызов Thread.Sleep приводит к

блокировке потока

Thread.Sleep(3000); // blocks for 3 seconds

Методы Suspend и Resume должны использоваться с

осторожностью

Они могут привести к тупикам (deadlocks)

Вызов Thread.Join приводит к ожиданию завершения

заданного потока.

Сравните: Авторы Java были вынуждены объявить

методы Suspend и Resume “не рекомендуемыми”

(“deprecated”) в более поздних версиях Java из-за

t.Start();

t.Join(); // Wait for the thread to exit

WaitHandle.WaitAll(waitEvents);

(C) Сафонов В.О. 2012

Локальная память потока

Локальная память потока – это слот данных, имеющийся в каждом потоке

Статические поля данныхКонструктор вызывается только для первого

потокаСтатические поля остальных потоков

инициализируются нулями

class ClassWithThreadState

{

[ThreadStatic] public static int count = 1;

public void ThreadMethod() { count++;

}

}

(C) Сафонов В.О. 2012

Прерывание и прекращение потоков

Метод Thread.Interrupt

“Будит” поток и генерирует в нем

ThreadInterruptedException

Метод Thread.Abort пытается прервать поток

“Будит” поток и генерирует в нем

ThreadAbortException

Исключение генерируется заново в конце блока catch до ResetAbort

Нет абсолютной гарантии

прекращения потока

Для этой цели используйте Thread.Join

(C) Сафонов В.О. 2012

Безопасное управление потоками

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

потоками

Race condition – неуправляемый порядок

доступа к общим ресурсам

Тупик – циклический список потоков, ждущих

друг друга

Лучше избежать одновременного доступа

Каждый элемент имеет свою собственную

копию данных

Стратегии синхронизации (доступа к данным экземпляра и статическим полям)

Синхронизированный контекст

Синхронизированный блок кода

Ручная синхронизация

(C)Сафонов В.О. 2012

Соседние файлы в папке Safonov