Реферат: Синхронизация потоков

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

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

·   синхронизация с помощью глобальныхпеременных

·   синхронизация с помощью обменасобытиями

·   синхронизация с помощью специальныхобъектов (событий, семафоров, критических секций, объектов исключительноговладения и других)

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

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

Третий метод — синхронизация с помощью специальных объектов —потребует рассмотрения разных объектов и разных методов синхронизации сиспользованием объектов. В Win32 API существует большое число объектов, которыемогут быть применены в качестве синхронизирующих, причем во многих случаяхвместо одного объекта может применяться объект другого типа. Поэтому будетинтересно рассмотреть несколько основных методов синхронизации с использованиемобъектов.

Общие представления о методахсинхронизации

При рассмотрении способов синхронизации удобно выделитьнесколько основных способов, применяемых разными операционными системами. Вчисле таких способов можно выделить четыре метода:

·   критические секции

·   объекты исключительного владения

·   события

·   синхронизация группой объектов

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

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

Часть операций, например получение указателя на какой–либоблок в куче, не нуждается в изменении самой кучи. То есть функции, осуществляющиеподобные операции могут выполняться одновременно разными потоками не конфликтуядруг с другом. Такие функции удобно назвать “читателями” — они не изменяют кучукак единый объект.

Другие операции, например выделение нового блока в куче,требуют внесения изменений в кучу — изменения в цепочке выделяемых блоков.Обычно такие изменения осуществляются не в одном месте, а требуетсясогласованное внесение изменений в нескольких структурах данных. В процессетакой операции структура кучи какое–то время оказывается нарушенной, вследствиечего одновременное выполнение таких действий должно быть исключено. Такиефункции удобно назвать “писателями” — они изменяют кучу как единый объект.

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

Можно сформулировать несколько правил для работы с такимобъектом:

·   если к объекту имеет доступ писатель,то ни читатели, ни другие писатели доступа не имеют;

·   если к объекту имеет доступ читатель,то возможен одновременный доступ других читателей и запрещен доступ писателям;

·   если объект свободен, то первыйпришедший писатель или читатель имеет право доступа.

Рассмотренный пример очень удобен, так как подобная ситуация(много читателей, единственный писатель) встречается сплошь и рядом — астандартного объекта для синхронизации доступа к такому объекту нет. Благодаряэтому такой пример становится благодатной почвой для рассмотрения разныхспособов синхронизации.

еще рефераты
Еще работы по информатике, программированию