スレッド実行制御に揮発性ブール値を何年も使用していますが、正常に機能しました
// 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
しかし、それは!よりも数桁遅いです。
私が書いた単純なテストケースは、volatile bool
アプローチを完了するのに約1秒かかります。しかし、std::atomic<bool>
私は約10分待って、あきらめました!
同じ効果memory_order_relaxed
でフラグload
を使用してみました。store
私のプラットフォーム:
- Windows764ビット
- MinGW gcc 4.6.x
私が間違っているのは何ですか?
注意:volatileは変数をスレッドセーフにしないことを私は知っています。私の質問は揮発性についてではなく、なぜアトミックが途方もなく遅いのかについてです。