Охраняемая подвеска - Guarded suspension

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

Применение

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

Реализация

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

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

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

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

Заметки

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

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

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