Обнаружьте гонки данных, включающие только атомарные операции, даже когда никакие критические разделы не заданы
-force-data-races
-force-data-races
осуществляет обнаружение гонок данных, включающих только атомарные операции, даже когда никакие критические разделы не заданы.
По умолчанию Средство поиска Ошибки обнаруживает гонки данных, только если одна или обе операции, получающие доступ к совместно используемой переменной, являются неатомарными. Можно явным образом включить обнаружение гонок данных, включающих только атомарные операции. Смотрите Data race including atomic operations
. Однако, если вы не используете критические разделы вообще в вашем коде, чтобы не отмечать слишком много операций, этот вид обнаружения гонки данных все еще отключен. Чтобы обеспечить обнаружение гонок данных, включающих атомарные операции только даже в отсутствие критических разделов, используйте опцию -force-data-races
.
В этом примере, переменной sharedVar1
совместно используется потоками с функциями запуска thread1_main
и thread2_main
но операции на sharedVar1
не защищены от параллельного доступа. Если при запуске Средство поиска Ошибки с опцией -checkers data_race_all
, вы не видите, что данные мчатся, потому что код не использует критические разделы вообще. Критический раздел, например, включил бы использование pthread_mutex_lock
- pthread_mutex_unlock
пара.
Вы также видите предупреждение в журнале:
Warning: Checker 'Data Race' is activated but no protection have been defined
Warning: Checker 'Data Race including atomic operations' is disabled because no critical sections, temporal exclusions or routines to disable/enable all interrupts have been defined.
| To force activation of this checker use option -force-data-races
Чтобы видеть гонки данных несмотря на отсутствие критических разделов, используйте опцию -force-data-races
.
Средство поиска ошибки:
polyspace-bug-finder -checkers data_race_all -force-data-races
Сервер средства поиска ошибки:
polyspace-bug-finder-server -checkers data_race_all -force-data-races