【发布时间】:2019-12-21 07:41:57
【问题描述】:
如何检测是否已为使用 gcc 5 的构建打开了线程清理器? __has_feature(thread_sanitizer) 和 __SANITIZE_THREAD__ 之间的两者都不起作用
#include <iostream>
using std::cout;
using std::endl;
int main() {
cout << __has_feature(thread_sanitizer) << endl;
cout << __SANITIZE_THREAD__ << endl;
}
https://wandbox.org/permlink/t5qYme4Whyj54aYV。这在具有线程清理器的 clang 版本上编译;但不适用于某些 gcc 版本(尤其是 5)
功能检查和__SANITIZE_THREAD__ 宏都可用于检测线程清理器何时已打开,因此测试可以抑制误报(例如,当线程清理器捕获实际上不是数据竞争的错误时)参见@ 987654322@了解更多
【问题讨论】:
-
关于近距离投票:如何让问题更清楚?
-
只是好奇; 为什么你需要这个?
-
“检测”如何?什么时候?为什么?在什么方面?
-
__SANITIZE_THREAD__仅存在于 gcc-7+ 中。 -
@Curious 好的,有道理
标签: c++ gcc c++14 thread-sanitizer