Можно ли как-то найти автоматически баги в многопоточном коде?
От: vsb Казахстан  
Дата: 07.03.18 11:06
Оценка:
Часто бывает, что баги в многопоточном коде не проявляются на тестовых данных. Есть ли какой-нибудь инструмент, который смог бы прогнать тест и выдать ошибку, если тест полагался на негарантированное поведение, скажем так. Я пока могу только придумать — запустить этот тест на куче потоков на многопроцессорной машине, смоделировать максимально агрессивную среду, если можно так выразиться и ждать, пока упадёт. Но опять же это ничего не гарантирует и более того, ряд ошибок вроде переупорядочивания инструкций процессором (когда один поток видит изменения не в том порядке, в котором их делает другой поток), как я понимаю, на x86 вообще не проявятся, т.к. архитектура процессора этого не допускает (но на каком-нибудь ARM уже могут проявится, только мне его для тестов взять негде).

В Java в принципе есть правило happens-before и может быть кто-то сделал какой-то инструментарий, который под отладкой проверяет каждую инструкцию и детектирует, когда эта инструкция может встретить многозначность? Или что-то подобное.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.