Состоя́ние го́нки (Race condition) — ошибка программирования многозадачной системы, при которой работа системы зависит от того, в каком порядке выполняются части кода.
Рассмотрим пример кода (на Java)
volatile int x;
Поток 1: while (!stop) { x++; ... }
Поток 2: while (!stop) { if (x%2 == 0) System.out.println("x=" + x); ... }
Пусть x=0. Предположим, что выполнение программы происходит в таком порядке:
Самый простой способ решения, пригодный для нашего простого примера — копирование переменной x в локальную переменную. Вот исправленный код:
Поток 2: while (!stop) { int cached_x = x; if (cached_x%2 == 0) System.out.println("x=" + cached_x); ... }
Более сложный, но и более универсальный метод решения — синхронизация потоков, а именно:
volatile int x;
Поток 1: while (!stop) { synchronized(SomeObject) { x++; } ... }
Поток 2: while (!stop) { synchronized(SomeObject) { if (x%2 == 0) System.out.println("x=" + x); } ... }
Аппарат лучевой терапии Therac-25 был первым в США медицинским аппаратом, в котором вопросы безопасности были возложены исключительно на программное обеспечение. Этот аппарат работал в трёх режимах:
Эти три режима задавались вращающимся диском, в котором было отверстие с отклоняющими магнитами для электронной терапии, и мишень с рассеивателем для рентгеновской. Из-за состояния гонки между управляющей программой и обработчиком клавиатуры иногда случалось, что в режиме рентгеновской терапии диск оказывался в положении «Электронная терапия», и пациент напрямую облучался пучком электронов в 25 МэВ, что вело к переоблучению. При этом датчики выводили «Нулевая доза», поэтому оператор мог повторить процедуру, усугубляя ситуацию.
Часть кода была взята из Therac-6 и Therac-20. При этом в Therac-6 не было электронной терапии, а в Therac-20 были аппаратные меры безопасности, которые не давали включить излучение, когда диск в неправильном положении.
Ошибки программирования | Параллельные вычисления
Wettlaufsituation | Race hazard | Condición de carrera | Lenktynių aplinka | Hazard (elektronika) | 競爭危害
This article is licensed under the GNU Free Documentation License.
It uses material from the
"Состояние гонки".
Home Page • arts • business • computers • games • health • hospitals • home • kids & teens • news • physicians • recreation• reference • regional • science • shopping • society • sports • world