Page 244 - 6571
P. 244

Додаток 3



                                       ЛАБОРАТОРНА РОБОТА № 3

                          Синхронізація потоків засобами мови Java





                        Мета: Навчитися  виконувати  захист  критичних  секцій  про-
                                  грамного коду шляхом синхронізації потоків з метою

                                  уникнення пошкодження та втрати даних.

                                              3.1 Теоретичні відомості


                        У мові Java ключем до синхронізації виступає концепція мо-
                  нітора. Монітор у мові Java – це об’єкт, який використовується,
                  як  взаємовиключне  блокування  (mutually  exclusive  lock),  або
                  м’ютекс. Тільки один потік може в один і той же самий час воло-

                  діти  монітором.  Коли  потік  робить  запит  на  блокування,  то  ка-
                  жуть, що він входить в монітор. Всі інші потоки, які намагають-
                  ся  увійти  в  заблокований  монітор,  будуть  призупинені  до  того

                  часу,  поки  потік,  що  отримав  блокування  не  покине  з  монітор.
                  Про всі інші потоки говорять, що вони очікують монітора. По-
                  тік,  який  володіє  монітором,  за  необхідності  може  повторно  в
                  нього увійти.

                        Розробники мови Java вільно адаптували концепцію моніто-
                  ра. Кожен об’єкт в Java володіє вбудованим блокуванням. Проте,
                  об’єкти в мові Java відрізняються від класичної реалізації моніто-

                  ра наступними трьома важливими пунктами, що потенційно мо-
                  жуть впливати на безпеку потоків:
                        1. Поля не обов’язково повинні бути закритими.

                        2. Методи не зобов’язані бути синхронізованими.
                        3. Клієнтам доступне керування вбудованим блокуванням.
                        Ці пункти свідчать про явне нехтування розробниками мови

                  Java  вимогами  безпеки,  викладеними  Пером  Брінчем  Хансеном
                  (Fer Brinch Hansen) і Тоні Хоаром (Тоnу Ноаrе) в 1970-х роках.
                        Щоб  уникнути  пошкодження  даних,  що  спільно  використо-
                  вуються декількома потоками, необхідно синхронізувати доступ



                                                             243
   239   240   241   242   243   244   245   246   247   248   249