<<
>>

Синхронизация конкуренции

В языке Java методы (не конструкторы) можно определить как синхронизированные. Вызванный в конкретном объекте синхронизированный метод должен завершить свою работу, прежде чем в этом объекте может быть запущен другой синхронизированный метод.
Синхронизация конкуренции над объектом организуется за счет синхронизации методов для доступа к разделяемым данным. Механизм синхронизации реализован следующим образом: каждый объект в Java имеет блокировку. Синхронизированный метод должен заблокировать объект перед началом своей работы, это предотвращает возможность выполнения объектом (в этот период) других синхронизированных методов. Синхронизированный метод снимает блокировку с объекта после окончания своей работы. Рассмотрим следующий фрагмент: class Buffer {

private int [100] buf;

public synchronized void append(int element) { . . . } public synchronized int take() { . . . }

}

Оба метода, определенных в классе Buffer, являются синхронизированными, что предотвращает их взаимное влияние во время работы с одним и тем же объектом, даже если они вызываются разными потоками.

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

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

}

где выражение должно вычислять объект, а оператор может быть как простым, так и составным. На время выполнения этого оператора или операторов объект

606

Глава 19. Основные понятия параллельного программирования

блокируется. Таким образом, оператор или операторы выполняются точно так же, как если бы они были телом синхронизированного метода.

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

<< | >>

Еще по теме Синхронизация конкуренции:

  1. Синхронизация
  2. КОНКУРЕНЦИЯ
  3. 5. Запрет недобросовестной конкуренции
  4. Как избавиться от конкуренции?
  5. Как избавиться от конкуренции?
  6. Конкуренция из-за ограниченных ресурсов. Глупая ярость
  7. 4. Проблема «конкуренции исков» при защите вещных прав
  8. § 28 Ослабление силы обязательства в исполнении. – Отсрочка. – Рассрочка по усмотрению суда. – Внешние неисправности, ослаб- ляющие силу обязательства. – Снисхождение к состоянию долж- ника. – Уступка имущества займодавцам. – О русских посредни- ческих комиссиях и администрациях. – Действие несостоятель- ности и конкуренции претензий.
  9. СТИМУЛЯЦИЯ ТРИГГЕРНАЯ
  10. ТЕТА-РИТМ
  11. ПСИХОФИЗИОЛОГИЯ ПОРАЖЕНИЙ ЛОКАЛЬНЫХ МОЗГА ГОЛОВНОГО
  12. Наставление Александру