Обнаружите гонки данных, включающие только атомарные операции, даже когда не заданы критические разделы
-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
.
Bug Finder:
polyspace-bug-finder -checkers data_race_all -force-data-races
Сервер Bug Finder:
polyspace-bug-finder-server -checkers data_race_all -force-data-races
Эта опция не используется в анализе Polyspace во время You Code.