ВУЗ:
Составители:
66
тельного процесса, например, вероятность его завершения за данный
период времени.
Учитывая вышеизложенное, можно сделать вывод, что потоки в
общем случае (когда программист не предпринял специальных мер по
их синхронизации) протекают независимо, асинхронно друг другу. Это
справедливо как по отношению к потокам одного процесса, выполняю-
щим общий программный код, так и по отношению к потокам разных
процессов, каждый из которых выполняет собственную программу.
Для синхронизации потоков прикладных программ программист
может использовать как собственные средства и приемы синхрониза-
ции, так и средства ОС. Например, два потока одного прикладного про-
цесса могут координировать свою работу с помощью доступной для них
обоих глобальной логической переменной, которая устанавливается в
единицу при осуществлении некоторого события, например выработки
одним потоком данных, нужных для продолжения работы другого. Од-
нако во многих случаях более эффективными или даже единственно
возможными являются средства синхронизации, предоставляемые ОС в
форме системных вызовов. Так, потоки, принадлежащие разным про-
цессам, не имеют возможности вмешиваться каким-либо образом в ра-
боту друг друга. Без посредничества ОС они не могут приостановить
друг друга или оповестить о произошедшем событии.
Средства синхронизации используются ОС не только для синхро-
низации прикладных процессов, но и для ее внутренних нужд. Обычно
разработчики ОС предоставляют в распоряжение прикладных и систем-
ных программистов широкий спектр средств синхронизации. Эти сред-
ства могут образовывать иерархию, когда на основе более простых
средств строятся более сложные, а также могут быть функционально
специализированными. Например, средства для синхронизации потоков
одного процесса, средства для синхронизации потоков разных процес-
сов при обмене данными и т.д.
3.3.3 Пример необходимости синхронизации
Пренебрежение вопросами синхронизации процессов, выполняю-
щихся в режиме мультипрограммирования, может привести к их непра-
вильной работе или даже к краху системы.
Рассмотрим пример, демонстрирующий необходимость синхрони-
зации двух процессов, каждый из которых работает с некоторым общим
ресурсом – программой печати файлов (принт-сервером, рис. 17).
Эта программа печатает по очереди содержимое файлов, имена ко-
торых последовательно в порядке поступления записывают в специаль-
ный общедоступный файл «заказов». Специальная переменная NEXT,
доступная всем процессам-клиентам, содержит номер первой свободной
Страницы
- « первая
- ‹ предыдущая
- …
- 64
- 65
- 66
- 67
- 68
- …
- следующая ›
- последняя »