Page 253 - 6571
P. 253
Додаток 4
ЛАБОРАТОРНА РОБОТА № 4
Керування міжпотоковими комунікаціями
засобами мови Java
Мета: Навчитися керувати міжпотоковими комунікаціями
для захисту критичних секцій коду від одночасного
доступу з декількох потоків, використовуючи для
цього принцип умовної синхронізації.
4.1 Теоретичні відомості
Як уже згадувалося в попередній лабораторній роботі, у мові
Java ключем до синхронізації виступає концепція монітора. Умо-
вна синхронізація в моніторах програмується за допомогою так
званих умовних змінних. Умовна змінна використовується для
припинення роботи процесу, безпечне виконання якого є немож-
ливим до моменту переходу монітора в стан, що задовольняє де-
якій логічній умові. Умовні змінні також застосовуються для за-
пуску призупинених процесів, у випадку коли умова набуває зна-
чення «істина».
У попередній лабораторній роботі було представлено прик-
лад у якому імітується робота банку з декількома рахунками. Ко-
жна згенерована транзакція переміщає довільну суму грошей з
рахунку, що обслуговується поточним потоком, на іншій довіль-
но обираний рахунок.
Модифікуємо попередній приклад так, щоб тепер два потоки
працювали з одним банківським рахунком. У першому потоці бу-
де робитися спроба зняти певну суму з рахунку, а у другому –
покласти її на рахунок.
public void transfer(boolean action) throws Interrupt
dException {
int amount = (int)(Math.random()*500);
if (action) {
252