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
   248   249   250   251   252   253   254   255   256   257   258