Lt304888.ru

Туристические услуги

Охраняемая приостановка (синхронизация)

23-10-2023

Перейти к: навигация, поиск
Шаблон проектирования
Охраняемая приостановка
Guarded Suspension
Тип:

Шаблоны параллельного программирования

Назначение:

Коммуникация между потоками

Описан в Design Patterns

Нет

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

Охраняемая приостановка — общепринятая идиома для координации работы потоков.

Пример на Java

В следующем примере показан обмен сообщениями между двумя потоками с использованием шаблона охраняемая приостановка:

public class Drop {
 
    // Сообщение, которое будет передано
    // от потока-источника потоку-приёмнику.
    private String message;
 
    // True если поток-приёмник должен дождаться пока поток-источник
    // оставит сообщение, или false если поток-источник должен дождаться
    // пока поток-приёмник заберёт ранее оставленное (потоком-источником)
    // сообщение.
    private boolean empty = true;
 
    public synchronized String take() {
 
        // Ожидаем, пока сообщение станет доступным.
        while (empty) {
            try {
                wait();
            } catch (InterruptedException e) {}
        }
 
        // Переключаем статус.
        empty = true;
 
        // Уведомляем поток-источник, о том
        // что статус был изменён.
        notifyAll();
 
        return message;
    }
 
    public synchronized void put(String message) {
 
        // Ожидаем, пока поток-приёмник не заберёт
        // предыдущее сообщение.
        while (!empty) {
            try { 
                wait();
            } catch (InterruptedException e) {}
        }
 
        // Переключаем статус.
        empty = false;
 
        // Сохраняем сообщение.
        this.message = message;
 
        // Уведомляем поток-приёмник, о том
        // что статус был изменён.
        notifyAll();
    }
}

Ссылки

  • Lea Doug Concurrent Programming in Java Second Edition. — Addison-Wesley, 2000. — ISBN 0-201-31009-0.

Ссылки

  • Guarded Blocks, Concurrency, The Java™ Tutorials [1]


Охраняемая приостановка (синхронизация).

© 2020–2023 lt304888.ru, Россия, Волжский, ул. Больничная 49, +7 (8443) 85-29-01