Студопедия

Главная страница Случайная лекция


Мы поможем в написании ваших работ!

Порталы:

БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика



Мы поможем в написании ваших работ!




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

Читайте также:
  1. Автоматизация работы с помощью макросов
  2. Ввод с помощью датчика псевдослучайных чисел
  3. Вектор функции 2-х скалярных аргументов. Предел. Дифференцирование. Понятие поверхности. Гладкие поверхности и их параметризация с помощью вектор функции.
  4. Группы критических органов
  5. Исследование функций с помощью производных
  6. Лечение посттравматического стрессового расстройства с помощью НЛП
  7. Ликвидация прихвата с помощью пакера
  8. Ликвидация прихватов с помощью жидкостных ванн
  9. Ликвидация прихватов с помощью ударных механизмов
  10. Методология проектирования БД с помощью Case-инструментов SILVERRUN

В Windows, проблема взаимного исключения для параллельных потоков, выполняемых в контексте одного процесса, решается при помощи объекта типа Critical_Section, который не является объектом ядра ОС. Для работы с объектами этого типа, в Windows используется множество следующих функций:

1) InitializeCriticalSection (p);

2) EnterCriticalSection (p);

3) TryEnterCriticalSection (p);

4) LeaveCriticalSection (p);

5) DeleteCriticalSection (p).

Каждая из этих функций имеет единственный параметр, представляющий собой указатель на объект типа Critical_Section. Все функции, за исключением третьей, не возвращают значений.

Третья возвращает ненулевое значение, если поток вошел в критическую секцию, либо уже находится в ней. В противном случае возвращает ноль.

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

В программе описывается объект типа Critical_Section и считается, что имя этого объекта логически связано с используемым разделяемым ресурсом. Перед тем как начать работу с указанным объектом, его инициализируют путем вызова InitializeCriticalSection. После инициализации объекта, в каждом из параллельных потоков перед входом в собственную критическую секцию потока вызывается функция 2. Она исключает одновременный вход в критические секции в параллельных потоках. После завершения работы с разделяемым ресурсом поток должен покинуть свою критическую секцию. Для подтверждения этого факта, после критической секции следует вызов LeaveCriticalSection.

По окончании работы с CS все системные ресурсы, использованные этим объектом, освобождаются путем вызова DeleteCriticalSection.

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


<== предыдущая страница | следующая страница ==>
Объекты синхронизации и функции ожидания | Мьютексы

Дата добавления: 2014-10-10; просмотров: 301; Нарушение авторских прав




Мы поможем в написании ваших работ!
lektsiopedia.org - Лекциопедия - 2013 год. | Страница сгенерирована за: 0.002 сек.