Операционные системы, среды и оболочки. Макаренко С.И. - 39 стр.

UptoLike

Составители: 

Рассмотрим, например (рис. 2.3), задачу ведения базы данных клиентов
некоторого предприятия. Каждому клиенту отводится отдельная запись в
базе данных, в которой среди прочих полей имеются поля Заказ и Оплата.
Программа, ведущая базу данных, оформлена как единый процесс, имеющий
несколько потоков, в том числе поток А, который заносит в базу данных
информацию о заказах, поступивших от клиентов, и поток В, который
фиксирует в базе данных сведения об оплате клиентами выставленных
счетов. Оба эти потока совместно работают над общим файлом базы данных,
используя однотипные алгоритмы, включающие три шага.
1. Считать из файла базы данных в буфер запись о клиенте с
заданным идентификатором.
2.
Внести новое значение в поле Заказ (для потока А) или Оплата
(для потока В).
3. Вернуть модифицированную запись в файл базы данных.
Рис. 2.3. Возникновение гонок при доступе к разделяемым данным
Обозначим соответствующие шаги для потока А как Al, A2 и A3, а для
потока В как Bl, B2 и ВЗ. Предположим, что в некоторый момент поток А
обновляет поле Заказ записи о клиенте N. Для этого он считывает эту запись
в свой буфер (шаг А1), модифицирует значение поля Заказ (шаг А2), но
39
      Рассмотрим, например (рис. 2.3), задачу ведения базы данных клиентов
некоторого предприятия. Каждому клиенту отводится отдельная запись в
базе данных, в которой среди прочих полей имеются поля Заказ и Оплата.
Программа, ведущая базу данных, оформлена как единый процесс, имеющий
несколько потоков, в том числе поток А, который заносит в базу данных
информацию о заказах, поступивших от клиентов, и поток В, который
фиксирует в базе данных сведения об оплате клиентами выставленных
счетов. Оба эти потока совместно работают над общим файлом базы данных,
используя однотипные алгоритмы, включающие три шага.
     1.   Считать из файла базы данных в буфер запись о клиенте с
          заданным идентификатором.
     2.   Внести новое значение в поле Заказ (для потока А) или Оплата
          (для потока В).
     3.   Вернуть модифицированную запись в файл базы данных.




     Рис. 2.3. Возникновение гонок при доступе к разделяемым данным

     Обозначим соответствующие шаги для потока А как Al, A2 и A3, а для
потока В как Bl, B2 и ВЗ. Предположим, что в некоторый момент поток А
обновляет поле Заказ записи о клиенте N. Для этого он считывает эту запись
в свой буфер (шаг А1), модифицирует значение поля Заказ (шаг А2), но


                                    39