セブンイレブン、アトミック、非同期深さ

一、原子操作

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を実行します
        
        
        } 
    } 
    
    
}

 

おすすめ

転載: www.cnblogs.com/pacino12134/p/11270846.html