如何检测是否已为使用 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__
宏都可用于检测线程清理程序何时已打开,因此测试可以抑制误报(例如,当线程清理程序捕获实际上不是数据竞争的错误时)请参阅此了解更多信息