19. Что такое race condition?

19. Что такое race condition?

UNKNOWN

Пример: операция инкремента над волойтал переменной

Состояние гонки (race condition) - ошибка проектирования многопоточной системы или приложения, при которой эта работа напрямую зависит от того, в каком порядке выполняются потоки. Состояние гонки возникает когда поток, который должен исполнится в начале, проиграл гонку и первым исполняется другой поток: поведение кода изменяется, из-за чего возникают недетерменированные (непредопределенные) ошибки.

Распространённые способы решения:

  • Использование локальной копии — копирование разделяемой переменной в локальную переменную потока. Этот способ работает только тогда, когда переменная одна и копирование производитсяатомарно (за одну машинную команду), использование volatile.

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

  • Комбинирование методов - вышеперечисленные способы можно комбинировать, копируя «опасные» переменные в синхронизированном блоке. С одной стороны, это снимает ограничение на атомарность, с другой — позволяет избавиться от слишком больших синхронизированных блоков.

Очевидных способов выявления и исправления состояний гонки не существует.

Лучший способ избавиться от гонок — правильное проектирование многозадачной системы


Предыдущий вопрос: 18. Что такое livelock?

Следующий вопрос: 20. Что такое Фреймворк fork-join? Для чего он нужен?

Все вопросы по теме: список

Все темы: список

Вопросы/замечания/предложения/нашли ошибку: напишите мне

Report Page