64

C++11 では、std::atomic<>テンプレート ライブラリが導入されました。標準では、複数のスレッドで共有される変数をアトミックに設定/取得する操作が指定store()されています。load()

私の質問は、割り当て操作とアクセス操作もアトミックですか?

つまり、次のとおりです。

std::atomic<bool> stop(false);
...
void thread_1_run_until_stopped()
{
    if(!stop.load())
        /* do stuff */
}

void thread_2_set_stop()
{        
    stop.store(true);
}

に相当:

void thread_1_run_until_stopped()
{
    if(!stop)
        /* do stuff */
}

void thread_2_set_stop()
{        
    stop = true;
}
4

2 に答える 2

55

非参照型の割り当て操作とアクセス操作もアトミックですか?

はい、そうです。 atomic<T>::operator Tおよびはそれぞれおよび とatomic<T>::operator=同等です。すべての演算子はアトミック クラスで実装されているため、期待どおりにアトミック操作を使用できます。atomic<T>::loadatomic<T>::store

「非参照」型について何を意味するのかわかりませんか? ここで参照型がどのように関連しているかはわかりません。

于 2013-09-17T13:35:17.137 に答える