2017-02-21 14 views
1

std::threadが実行された後(つまり、仕事関数を呼び出す)、join()と呼んだときにのみ動作し始めます。これはドキュメント内で少し不明です。join()を呼び出す前にstd :: threadが実行されますか?

+2

すぐに起動します。新しいスレッドが何かをする前に、他のスレッドがそれに参加したいときまで、新しいスレッドが待つことはむしろ意味がありません。 –

+1

スレッドは実行状態で作成されるため、スレッドは 'join()'の前に実行されます。また、スレッドを一時停止するために 'std :: mutex'などを使用することもできますが、停止状態のスレッドを作成するオプションはありません。 –

答えて

2

インスタンス化すると実行されます。

結合は、他のスレッドが実行を終了するまで現在のスレッドが待機するように使用されます。

いくつかの例コードstd::tread一旦

void f1(int n) 
{ 
    for (int i = 0; i < 5; ++i) { 
     std::cout << "Thread 1 executing\n"; 
     ++n; 
     std::this_thread::sleep_for(std::chrono::milliseconds(10)); 
    } 
} 

void f2(int& n) 
{ 
    for (int i = 0; i < 5; ++i) { 
     std::cout << "Thread 2 executing\n"; 
     ++n; 
     std::this_thread::sleep_for(std::chrono::milliseconds(10)); 
    } 
} 

int main() 
{ 
    int n = 0; 
    std::thread t1; // t1 is not a thread 
    std::thread t2(f1, n + 1); // pass by value 
    std::thread t3(f2, std::ref(n)); // pass by reference 
    std::thread t4(std::move(t3)); // t4 is now running f2(). t3 is no longer a thread 
    t2.join(); 
    t4.join(); 
    std::cout << "Final value of n is " << n << '\n'; 
} 

    Possible output: 
Thread 1 executing 
Thread 2 executing 
Thread 1 executing 
Thread 2 executing 
Thread 1 executing 
Thread 2 executing 
Thread 1 executing 
Thread 2 executing 
Thread 2 executing 
Thread 1 executing 
Final value of n is 5 
1

http://en.cppreference.com/w/cpp/thread/thread/threadからは、それが命令を実行することができる走行状態にある作成されます。

一定の時間間隔で何かが行われるという保証はありませんが、その間隔が長くなったり長くなるにつれて、何かが起こる確率が100%に近づくようになります。

通常、活気のあるデザインは、10分の1秒の間隔になると、待機していないすべてのスレッドが何らかのアクティビティを表示することを実際に保証します。

関連する問題