Состояние состязания

Состояние состязания - ситуация когда несколько процессов считывают или записывают данные (в память или файл) одновременно.

Рассмотрим пример, когда два процесса пытаются распечатать файл. Для этого им нужно поместить имя файла в спулер печати, в свободный сегмент.

in - переменная, указывающая на следующий свободный сегмент

out - переменная, указывающая на следующее имя файла для печати

 

 

Пример состязания

 

Распишем события по пунктам.

  1. Процесс Асчитывает переменную in (равную 7), и сохраняет ее в своей переменной next_free_slot.
  2. Происходит прерывание по таймеру, и процессор переключается на процесс В.
  3. Процесс Всчитывает переменную in (равную 7), и сохраняет ее в своей переменной next_free_slot.
  4. Процесс Всохраняет имя файла в сегменте7.
  5. Процесс Вувеличивает переменнуюnext_free_slot на единицу (next_free_slot+1), и заменяет значение in на 8.
  6. Управление переходит процессу А, и продолжает с того места на котором остановился.
  7. Процесс Асохраняет имя файла в сегменте7, затирая имя файла процесса В.
  8. Процесс Аувеличивает переменнуюnext_free_slot на единицу (next_free_slot+1), и заменяет значение in на 8.

Как видно из этой ситуации, файл процесса В не будет напечатан.