Охраняемая приостановка (синхронизация)
Перейти к навигации
Перейти к поиску
Шаблон:Шаблон проектирования Охраняемая приостановка (англ. guarded suspension) — это шаблон проектирования в параллельном программировании для управления операциями, которые для начала своего выполнения требуют как получения блокировки, так и удовлетворения заданным предварительным условиям.
Охраняемая приостановка — общепринятая идиома для координации работы потоков.
Пример на Java[править]
В следующем примере показан обмен сообщениями между двумя потоками с использованием шаблона охраняемая приостановка:
<source lang="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) {} }
// Сохраняем сообщение. this.message = message;
// Переключаем статус. empty = false;
// Уведомляем поток-приёмник, о том // что статус был изменён. notifyAll(); }
}
</source>
Литература[править]
- Lea Doug Concurrent Programming in Java Second Edition. — Addison-Wesley, 2000. — ISBN 0-201-31009-0.
Ссылки[править]
- Guarded Blocks, Concurrency, The Java™ Tutorials [1]