Охраняемая приостановка (синхронизация)
Ошибка скрипта: Модуля «Unsubst» не существует.
Шаблон:Шаблон проектирования Охраняемая приостановка (англ. Шаблон:Langi) — это шаблон проектирования в параллельном программировании для управления операциями, которые для начала своего выполнения требуют как получения блокировки, так и удовлетворения заданным предварительным условиям.
Охраняемая приостановка — общепринятая идиома для координации работы потоков.
Пример на 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();
}
}
Литература[править]
- Страница Модуль:Citation/CS1/styles.css не имеет содержания.Шаблон:±. Concurrent Programming in Java Second Edition. — Addison-Wesley, 2000. — ISBN 0-201-31009-0.
Ссылки[править]
- Guarded Blocks, Concurrency, The Java™ Tutorials [1]
This article "Охраняемая приостановка (синхронизация)" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:Охраняемая приостановка (синхронизация). Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.