2013-03-17 73 views
0

我正在通過對C++ 0x(C++ 11)中存在的多線程的新支持。在C++中的線程ID行爲11

因此,每個線程都有一個類型爲std :: thread:id的唯一標識符。

考慮下面的示例程序:

void hello_world() 
{ 
    std::cout<<"hello_world \n"; 
} 

int main() 
{ 

    std::cout<<"Main thread id is "<<std::this_thread::get_id()<<"\n"; 

    std::thread t(hello_world); 

    std::cout<<"Child thread id is "; 
    std::cout<<t.get_id()<<"\n"; 
    t.join(); 
} 

我得到了一個樣本輸出如下:

主線程ID爲140502917359424

子線程ID爲140502900623104

程序hello_world

主要的線程ID我的示例輸出中的線程大於子線程ID。

線程ID是否完全獨立於其啓動時間?

如果不是:有沒有一種方法來區分線程T1是否早於線程T2從線程ID開始?

回答

8

std::thread::get_id()只是一個任意值,它的唯一屬性是它保證對於當前正在運行的每個線程都是唯一的(但是當線程結束它的id時可以重用)。

爲了告訴哪個線程首先啓動,你只需要自己做:例如。維護一個計數器,並以某種方式將值與線程相關聯,無論是將它們都包裝在一個類中,還是將值傳遞給線程函數,或者使用線程本地存儲,......您就明白了。

我想不出有什麼C++或系統工具可以爲你做,也許是因爲知道一堆線程的相對創建順序通常是毫無意義的。你只需開火併讓他們完成工作。

3

線程ID和線程創建之間不能有嚴格的關係。線程由其他線程創建,因此這種創建可能會並行發生。通常線程ID只是一個(重新解釋的)指向線程內部狀態的指針,所以你不應該試圖解釋任何東西。