一、原子操作
G ++;
G + = 1;
G = + 1; //はなりません。
++、のための一般的なアトミック操作 - 、+ =、&=、| =、^ =サポート、他はサポートしていない可能性が
二、STD ::非同期深さ
非同期タスクを作成します。
1の#include <iostreamの> 2の#include <スレッド> 3 使用して 名前空間STDを、 4 5 int型mythread(){ 6 COUTは<< " mythreadは初めれる" << ENDL。 7 リターン 1 。 8 } 9 10 INT メイン(){ 11 のstd ::将来< 整数 >結果= STD ::非同期(mythread); // 默认はstd ::起動::非同期| std ::打ち上げは:: defered 12 coutの<<結果を。取得()<< てendlを。 13 }
1、非同期パラメータ
遅延コール:のstd ::打ち上げ:: defered
1つの#include <iostreamの> 2の#include <スレッド> 3。 使用した 名前空間STD; 4 。5 INT MyThread(){ 6 COUT << " MyThreadは初めIS " << ENDL; 7 リターン 1 ; 8 } 。9 10 INT (メイン){ 11 のstd ::フューチャー< int型の非同期>結果=のstd ::(起動defered、MyThreadのstd :: ::); // 遅延コールは、新しいスレッドを作成していない、唯一の呼び出しは取得/ウェイト機能は、スレッドの入り口を実行します関数 12である 。COUT <<結果GET()<< ; ENDL 13です }
STDの作成を強制::打ち上げ::非同期スレッド
#include <iostreamの> する#include <スレッド> 使用して 名前空間STDは、 int型MyThread(){ COUT << " MyThread初めIS " << ; ENDL リターン 1。; } int型のmain(){ STD ::将来 < 整数 >結果= STDを非同期::(STD :: ::非同期、MyThreadを起動します); //は新しいスレッドで非同期タスクの実行を強制し、それはシステムがスレッドエントリ機能を実行するために、新しいスレッドを作成しなければならないことを意味 coutの<<結果は。GET()<< ENDL; }
std ::打ち上げ::非同期| std ::打ち上げ:: defered
1つの#include <iostreamの> 2の#include <スレッド> 3。 使用した 名前空間STD; 4 。5 INT MyThread(){ 6 COUT << " MyThreadは初めIS " << ENDL; 7 リターン 1 ; 8 } 。9 10 INT (メイン){ 11 // |意味、コールの非同期動作が、そこに作成されない場合がありますが、システムが選択し、新しいスレッドを作成することができ、自身の 12 のstd ::フューチャー< 整数 >結果=のstd ::非同期(のstd :: ::打ち上げ非同期| のstd :: :: defered起動、MyThread); 13 。COUT <<結果GET()<<endl; 14 }
STDと引数::打ち上げ::非同期|のstd ::打ち上げ:: deferedとして、システムが非同期(新しいスレッドを作成するため)または同期(新しいスレッドを作成しません)実行を決定することはないだろう。
図2に示すように、非同期スレッド差
スレッドは、スレッドは、スレッドが失敗する可能性が作成し、システムリソースの制約場合theradを行う場合には、プログラム全体がクラッシュすることがあり、スレッドを作成するために設計され、そして追加のパラメータなしの非同期呼び出しは、新しいスレッドを作成しませんが、呼び出されるフォローアップ非同期タスクmythreadが、これは(例えば、メインスレッドでmythread関数を呼び出すのと同等、その後、メインに入るなど)文を取得したスレッド上で実行する前に、要求する機能
非同期は、一般的に呼ばれるスレッドを作成し、非同期タスクを作成するように言わないでください。
最も明白な違い:時々スレッドを作成しない非同期(async)、例えば、上記のコードは、関数が呼び出されたときにのみ、それ以外の場合は実行されません、スレッドを作成することになります。
あなたがスレッドの戻り値を取りたい場合は、グローバル変数の割り当てを設定する必要があります。スレッド関数の戻り値を取得する非同期簡単
スレッドの数は200から100を超えることはできません、タイムスライスがあり、
3、非同期の不確実性
何の判定非同期のスレッドが作成されていないがありますか?
wait_for使用します()
書式#include <iostreamの> の#include <スレッド> 使用して 名前空間はstdを、 int型mythread(){ COUT << " mythreadが初めれる" << ENDL。 リターン 1 ; } int型のmain(){ のstd ::将来 < 整数 >結果= STD ::非同期(mythread)。 // result.wait_for(10S)、(10分)都可以 のstd :: future_status状態= result.wait_for(STD ::クロノ::秒(0)); // は0ms であれば(状態== のstd :: future_status ::延期){ //実装遅らせ、すぐにスレッドを作成しないでください coutの<<検索結果を。GET()<< てendlを; } 他{ // 遅滞なくスレッドが // スレッドが上で動作する IF(ステータス== のstd :: :: future_status READY){ // スレッド轢か、成功リターン } 他の IF(ステータス== のstd :: :: future_statusタイムアウト){ // タイムアウト、スレッドが実行されていない、と他のスレッドがSLEEPを実行します } } }