線程的標識類型是std::thread::id,可以通過兩種方式進行檢索。第一:可以通過std::thread對象的成員函數get_id()進行直接獲取,如果std::thread對象沒有和任何線程相關,get_id()將返回std::thread::type默認構造函數,這個值表示“沒有線程”。第二:當前線程中調用std::this_thread::get_id()也可以獲取線程標識。
std::thread::id實例常用檢測線程是否需要進行一些操作,比如當用線程來分割一項工作,主線程需要做一些其他工作。這種情況下,啓動其他線程前,它可以將自己的的線程ID通過std::this_thread::get_id()得到,並進行存儲。就是算法的核心部分,每個線程都要檢查一下,其擁有的線程ID是否與初始線程的ID相等:
std::thread::id master_thread;
void some_core_part_of_algorithm()
{
if(std::this_thread::get_id() == master_thread)
{
do_master_thread_work();
}
do_common_work();
}
另外,當前線程的std::thread::id將存儲到一個數據結構中,之後用這個結構體對比當前線程的ID和存儲線程ID做對比,來決定操作時被“允許”,還是“需要”(permitted/required)。
線程id可以提供不同的值排序,可以作爲鍵值。也可以直接使用輸出流來記錄一個std::thread::id對象的值:
std::cout << std::this_thread::get_id();