0

По определению состояние гонки происходит, когда два разных Процесса пытаются одновременно изменить общую переменную, но это происходит, даже если один из них не пишет, когда и другой пишет?Состояние гонки Читать Запись

Пример:

Process X; var.read -> var.change -> var.write Process Y; var.read -> var.change -> var.write

Process X; var.read -> var.change Process Y; var.read -> var.change -> var.write Process X; var.write

Оба должны привести к несогласованности поскольку запись происходит, когда что-то еще происходит, но должны они оба ведут к гонке условия?

+0

Это будет зависеть от вашей модели вычислений, но, например, в стандарте C11 draft n1570 говорится: * 5.1.2.4 Многопоточные исполнения и расписания данных 4 Две оценки выражений конфликтуют, если один из них изменяет местоположение памяти, а другой читает или изменяет одну и ту же ячейку памяти. [...] 25 Выполнение программы содержит гонку данных, если она содержит два конфликтующих действия в разных потоках, по крайней мере один из которых не является атомарным, и не происходит до другого. Любая такая гонка данных приводит к неопределенному поведению. * – EOF

ответ

0

Вы можете легко иметь гоночную обстановку с одним писателем и одновременно читателями.

Предположим, вы хотите у, чтобы быть больше нуля и иметь что-то вроде этого:

GLOBAL X ; 

if X > 100 then 
    y := x - 50 ; 

Если кто-то пишет х, у может оказаться меньше нуля.

Смежные вопросы