Обнаружение скачков данных, связанных только с атомарными операциями, даже если критические участки не определены
-force-data-races
-force-data-races обеспечивает обнаружение скачков данных, связанных только с атомарными операциями, даже если критические участки не определены.
По умолчанию Bug Finder обнаруживает гонки данных только в том случае, если одна или обе операции доступа к общей переменной являются неатомными. Можно явно включить обнаружение скачков данных, связанных только с атомарными операциями. Посмотрите Data race including atomic operations. Однако если в коде вообще не используются критические разделы, то во избежание выделения слишком большого количества операций этот вид обнаружения гонки данных по-прежнему отключен. Для принудительного обнаружения скачков данных, связанных с атомными операциями, даже при отсутствии критических участков используйте опцию -force-data-races.
В этом примере переменная sharedVar1 совместно используется потоками с функциями запуска thread1_main и thread2_main но операции на sharedVar1 не защищены от параллельного доступа. Если вы запускаете Bug Finder с опцией -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
Этот параметр неприменим в анализе Polyspace as You Code.