C++11同時とマルチスレッドのまとめ(九)--原子操作atomicの概要
5039 ワード
文書ディレクトリ
(一)スレッド概念、作成およびパラメータ伝達(二)排他的反発ロック–mutex,lock_guardyと他のmutex(3)unique_lock置換lock_guardy(四)単一例モード(Singleton)でのスレッドセキュリティ問題(五)window臨界領域(六)condition_variable条件変数(7)std::async非同期タスクとstd::future<>(8)packaged_task<>とpromise<>(九)原子操作atomic<>の概要
(1)概要
(2)使用方法
1.テンプレートクラス、定義後変数の使用方法と一致する2.反発量ロックを用いるマルチスレッド同時モード3は不要である.データに対する操作過程は分割できず、データの安全を保証し、lockより効率が高い.一般に1つの変数のみに対して、同時の自己加算自己減算に用いられ、一般的にカウント統計に用いる.++–+=&=|=^=その他のデータにのみ適用すると、例えばa=a+1 6などのエラーが発生する可能性があります.コピー構造と付与値を直接使用することはできない.読み込みに使用できるload()は、以下のatomic atm 1=0である.atm1++; atomic atm2(atm1.load()); またはauto atm 2=atm 1.load(); 8.書くにはstore()atm 2を使用する.store(666);
std::atomic<int> atmnum(10); // 10 int
int commVar = 0;
std::mutex mtx;
// mutex
void Write(){
for (size_t i = 0; i < 1000000; i++) {
mtx.lock();
commVar++;
mtx.unlock();
}
return;
}
int main(int argc, char const *argv[]){
std::thread t1(Write);
std::thread t2(Write);
t1.join();
t2.join();
std::cout<<commVar<<std::endl;
std::cout<<"main thread.
";
}