2.5識別線程(C++併發編程實戰)

線程的標識類型是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();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章