Состояние состязания
Состояние состязания - ситуация когда несколько процессов считывают или записывают данные (в память или файл) одновременно.
Рассмотрим пример, когда два процесса пытаются распечатать файл. Для этого им нужно поместить имя файла в спулер печати, в свободный сегмент.
in - переменная, указывающая на следующий свободный сегмент
out - переменная, указывающая на следующее имя файла для печати
Пример состязания
Распишем события по пунктам.
- Процесс Асчитывает переменную in (равную 7), и сохраняет ее в своей переменной next_free_slot.
- Происходит прерывание по таймеру, и процессор переключается на процесс В.
- Процесс Всчитывает переменную in (равную 7), и сохраняет ее в своей переменной next_free_slot.
- Процесс Всохраняет имя файла в сегменте7.
- Процесс Вувеличивает переменнуюnext_free_slot на единицу (next_free_slot+1), и заменяет значение in на 8.
- Управление переходит процессу А, и продолжает с того места на котором остановился.
- Процесс Асохраняет имя файла в сегменте7, затирая имя файла процесса В.
- Процесс Аувеличивает переменнуюnext_free_slot на единицу (next_free_slot+1), и заменяет значение in на 8.
Как видно из этой ситуации, файл процесса В не будет напечатан.