提问人:chrysante 提问时间:11/11/2023 更新时间:11/11/2023 访问量:39
通过线程清理器忽略数据争用报告
Ignore data race report by thread sanatizer
问:
如何告诉 Clangs 线程清理器忽略检测到的数据争用?
我的程序有一个数据竞争,我不介意,也不想“修复”。我有一个调试UI,可以观察动态系统。系统在不断变化,UI 从另一个线程读取系统的值。这显然有数据竞争,但据我了解,系统中的数据不应该受到来自另一个线程的读取的影响,我不介意有时调试UI是否显示垃圾值。此外,使系统使用同步会在运行时和开发时产生不必要的开销。
我认为这不是问题是否正确,有没有办法告诉线程清理器忽略数据竞争?
我想在这种情况下,标准 C++ 很少或根本没有保证,但我特别想知道 x86 架构上的行为。
为了便于演示,下面是一个示例:
double sharedValue = 0.0;
void logicThread() {
while (true) {
sharedValue += 0.333;
}
}
void uiTread() {
while (window.open()) {
window.display(sharedValue);
}
}
答: 暂无答案
评论
std::atomic<double> sharedValue = 0.0;
sharedValue = sharedValue + 0.333;
sharedValue
uiTread
window.display(sharedValue);
window.display(some_constant_value);
sharedValue
std::atomic
sharedValue