2017-10-10 21 views
0

C++ 11コンパイラを使用してCodeBlocksにstd::this_thread::get_id()を使用すると、スレッド番号は2から始まります。コードを実行するたびに、スレッド2-6を代わりに印刷します。 0 - 4となった。なぜですか?C++ std :: this_thread :: get_id()coutに渡す

バックグラウンドで実行されている他のC++アプリケーションがスレッドID 1と2を使用している可能性はありますか?何の魔術はこれですか?

#include <iostream> 
#include <thread> 
#include <mutex> 
using namespace std; 

std::mutex m; 

class TClass 
{ 
    public: 
     void run() 
     { 
      m.lock(); 
      cout << "Hello, I'm thread " << std::this_thread::get_id() << endl; 
      m.unlock(); 
     } 
}; 

int main() 
{ 
    TClass tc; 
    std::thread t[5]; 
    for (int i=0; i<5; i++) 
    { 
     t[i] = std::thread(&TClass::run, &tc); 
    } 

    for (int i=0; i<5; i++) 
    { 
     t[i].join(); 
    } 
    cout << "All threads terminated." << endl; 
} 
+1

あなたのメインは最初のスレッドで実行されます – user463035818

答えて

4

std::this_thread::get_id()によって返される値についての保証はありません。値がゼロから始まると仮定することはできませんし、順次になります。つまり、は不特定です。

+0

@PeteBecker:ありがとう、私は答えを改善しました。 –

関連する問題