Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Uml Book (Rus).doc
Скачиваний:
15
Добавлен:
11.08.2019
Размер:
58.74 Mб
Скачать

Синхронизация

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

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

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

  • sequential (последовательная) - вызывающие стороны должны координи­ровать свои действия еще до входа в вызываемый объект, так что в любой мо­мент времени внутри объекта находится ровно один поток управления. При наличии нескольких потоков управления не могут гарантироваться семанти­ка и целостность объекта;

  • guarded (охраняемая) - семантика и целостность объекта гарантируются при наличии нескольких потоков управления путем упорядочения вызовов всех охраняемых операций объекта. По существу, в каждый момент времени может выполняться ровно одна операция над объектом, что сводит такой под­ход к последовательному;

  • concurrent (параллельная) - семантика и целостность объекта при нали­чии нескольких потоков управления гарантируются тем, что операция рас­сматривается как атомарная.

Некоторые языки программирования поддерживают перечисленные конструк­ции непосредственно. Так в языке Java есть свойство synchronized, эквивалент­ное свойству concurrent в UML В любом языке, поддерживающем параллель­ность, все три подхода можно реализовать с помощью семафоров (Semaphores).

На рис. 22.3 показано, как эти свойства присоединяются к операции, - это до­стигается применением нотации, принятой в UML для ограничений (см. главу 6).

Применение С помощью ограничений можно моделировать различные вариации примитивов синхронизации. Например, можно модифицировать свойство concurrent, разрешив наличие нескольких читателей, но только одного писателя.

Представления с точки зрения процессов

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]