Состояние состязания
Состояние состязания - ситуация когда несколько процессов считывают или записывают данные (в память или файл) одновременно.
Рассмотрим пример, когда два процесса пытаются распечатать файл. Для этого им нужно поместить имя файла в спулер печати, в свободный сегмент.
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.
Как видно из этой ситуации, файл процесса В не будет напечатан.
Дата добавления: 2014-12-21; просмотров: 1067;