C++11同時プログラミング実作

6858 ワード

C++11以降はパラレルプログラミングインターフェースが組み込まれており、非常に簡単に使用できます.
#include  
#include 

void p()
{
	while (true)
	{
		std::cout << "asd" << std::endl;
	}
}

void main()
{
    std::thread p(p);
    p.join();//     ,               
}

2つのjoin関数が一緒に配置されている場合、コンパイラはデフォルトで最後のjoin関数の後にブロックされます.つまり、次のようにプログラムを書くのはOKです.
std::thread revVlpthead(revVlpData);
std::thread p(p);

revVlpthead.join();
p.join();//               

2番目のjoin文は実行されます.しかし、次の形式に変更すると、2番目の文は実行されません.
std::thread revVlpthead(revVlpData);
revVlpthead.join();//               

std::thread p(p);
p.join();//               

MFC環境ではjoin関数を使用するとマルチスレッドが使用されていないことに相当し、プログラムは依然としてあちらに待っているため、ブロックされていないdetach関数を使用することができる.
std::thread p(p);
p.detach();//      

スレッドにスリープ関数を追加して、プロセッサを譲ることができます.
#include //       
std::this_thread::sleep_for(std::chrono::seconds(1));//        

スレッドが共にアクセスするデータの前に、データの一貫性を保証するために、反発体を追加する必要があります.
ヘッダファイルを含める
#include //        
static std::mutex exclusive;//     
exclusive.lock();
//     
exclusive.unlock();

また,スレッドにループを加えると,ある場合にスレッドを終了させるフラグビットを自分で追加する必要があり,C++11規格ではスレッド終了の関数を直接操作しない.