多年来,我一直在使用 volatile bool 进行线程执行控制,效果很好
// in my class declaration
volatile bool stop_;
-----------------
// In the thread function
while (!stop_)
{
do_things();
}
现在,由于 C++11 增加了对原子操作的支持,我决定尝试一下
// in my class declaration
std::atomic<bool> stop_;
-----------------
// In the thread function
while (!stop_)
{
do_things();
}
但它比 ! 慢几个数量级volatile bool
!
我编写的简单测试用例大约需要 1 秒才能完成volatile bool
。std::atomic<bool>
然而,我已经等了大约 10 分钟并放弃了!
我尝试使用memory_order_relaxed
flagload
来store
达到相同的效果。
我的平台:
- Windows 7 64 位
- MinGW gcc 4.6.x
我做错了什么?
注意:我知道 volatile 不会使变量成为线程安全的。我的问题不是关于 volatile,而是关于为什么 atomic 慢得离谱。