WikiDer > Охраняемая подвеска

Guarded suspension

В параллельное программирование, охраняемая подвеска[1] это шаблон разработки программного обеспечения для управления операциями, требующими как замок быть приобретенным и предварительное условие быть удовлетворенным перед выполнением операции. Шаблон защищенной приостановки обычно применяется к вызовам методов в объектно-ориентированных программах и включает в себя приостановку вызова метода и вызывающего потока до выполнения предварительного условия (действующего как охранять) доволен.

Применение

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

Реализация

В Java класс Object предоставляет ждать() и уведомлять() методы, помогающие с защищенной приостановкой. В реализации ниже, первоначально найденной в Кучана (2004), если для успешного вызова метода не выполнено предварительное условие, метод будет ждать, пока он, наконец, не перейдет в допустимое состояние.

общественный класс пример {    синхронизированный пустота охраняемыйМетод() {        в то время как (!предварительное условие()) {            пытаться {                // Продолжаем ждать                Подождите();                // …            } ловить (InterruptedException е) {                // …            }        }        // Актуальная реализация задачи    }    синхронизированный пустота alterObjectStateMethod() {        // Изменяем состояние объекта        // …        // Сообщаем ожидающим потокам        уведомлять();    }}

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

Смотрите также

Заметки

  1. ^ Ли, Дуг (2000). Параллельное программирование в Java Second Edition. Ридинг, Массачусетс: Эддисон-Уэсли. ISBN 0-201-31009-0.

использованная литература

  • Кучана, Партха (2004). "Шаблоны проектирования архитектуры программного обеспечения в Java". Бока-Ратон, Флорида: публикации Ауэрбаха. Цитировать журнал требует | журнал = (Помогите)CS1 maint: ref = harv (ссылка на сайт).