在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ C/ 2.5 識別線程
3.4 本章總結
6.3 基于鎖設計更加復雜的數(shù)據(jù)結構
6.1 為并發(fā)設計的意義何在?
5.2 <code>C++</code>中的原子操作和原子類型
A.7 自動推導變量類型
2.1 線程管理的基礎
8.5 在實踐中設計并發(fā)代碼
2.4 運行時決定線程數(shù)量
2.2 向線程函數(shù)傳遞參數(shù)
第4章 同步并發(fā)操作
2.3 轉移線程所有權
8.3 為多線程性能設計數(shù)據(jù)結構
6.4 本章總結
7.3 對于設計無鎖數(shù)據(jù)結構的指導建議
關于這本書
A.1 右值引用
2.6 本章總結
D.2 &lt;condition_variable&gt;頭文件
A.6 變參模板
6.2 基于鎖的并發(fā)數(shù)據(jù)結構
4.5 本章總結
A.9 本章總結
前言
第10章 多線程程序的測試和調試
5.4 本章總結
第9章 高級線程管理
5.1 內(nèi)存模型基礎
2.5 識別線程
第1章 你好,C++的并發(fā)世界!
1.2 為什么使用并發(fā)?
A.5 Lambda函數(shù)
第2章 線程管理
4.3 限定等待時間
D.3 &lt;atomic&gt;頭文件
10.2 定位并發(fā)錯誤的技術
附錄B 并發(fā)庫的簡單比較
5.3 同步操作和強制排序
A.8 線程本地變量
第8章 并發(fā)代碼設計
3.3 保護共享數(shù)據(jù)的替代設施
附錄D C++線程庫參考
第7章 無鎖并發(fā)數(shù)據(jù)結構設計
D.7 &lt;thread&gt;頭文件
D.1 &lt;chrono&gt;頭文件
4.1 等待一個事件或其他條件
A.3 默認函數(shù)
附錄A 對<code>C++</code>11語言特性的簡要介紹
第6章 基于鎖的并發(fā)數(shù)據(jù)結構設計
封面圖片介紹
7.2 無鎖數(shù)據(jù)結構的例子
8.6 本章總結
8.1 線程間劃分工作的技術
4.2 使用期望等待一次性事件
8.4 設計并發(fā)代碼的注意事項
D.5 &lt;mutex&gt;頭文件
3.1 共享數(shù)據(jù)帶來的問題
資源
9.3 本章總結
10.3 本章總結
10.1 與并發(fā)相關的錯誤類型
D.4 &lt;future&gt;頭文件
3.2 使用互斥量保護共享數(shù)據(jù)
9.1 線程池
1.1 何謂并發(fā)
9.2 中斷線程
4.4 使用同步操作簡化代碼
A.2 刪除函數(shù)
1.3 C++中的并發(fā)和多線程
1.4 開始入門
第5章 C++內(nèi)存模型和原子類型操作
消息傳遞框架與完整的ATM示例
8.2 影響并發(fā)代碼性能的因素
7.1 定義和意義
D.6 &lt;ratio&gt;頭文件
A.4 常量表達式函數(shù)
7.4 本章總結
1.5 本章總結
第3章 線程間共享數(shù)據(jù)

2.5 識別線程

線程標識類型是std::thread::id,可以通過兩種方式進行檢索。第一種,可以通過調用std::thread對象的成員函數(shù)get_id()來直接獲取。如果std::thread對象沒有與任何執(zhí)行線程相關聯(lián),get_id()將返回std::thread::type默認構造值,這個值表示“沒有線程”。第二種,當前線程中調用std::this_thread::get_id()(這個函數(shù)定義在<thread>頭文件中)也可以獲得線程標識。

std::thread::id對象可以自由的拷貝和對比,因為標識符就可以復用。如果兩個對象的std::thread::id相等,那它們就是同一個線程,或者都“沒有線程”。如果不等,那么就代表了兩個不同線程,或者一個有線程,另一沒有。

線程庫不會限制你去檢查線程標識是否一樣,std::thread::id類型對象提供相當豐富的對比操作;比如,提供為不同的值進行排序。這意味著允許程序員將其當做為容器的鍵值,做排序,或做其他方式的比較。按默認順序比較不同值的std::thread::id,所以這個行為可預見的:當a<b,b<c時,得a<c,等等。標準庫也提供std::hash<std::thread::id>容器,所以std::thread::id也可以作為無序容器的鍵值。

std::thread::id實例常用作檢測線程是否需要進行一些操作,比如:當用線程來分割一項工作(如清單2.8),主線程可能要做一些與其他線程不同的工作。這種情況下,啟動其他線程前,它可以將自己的線程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將存儲到一個數(shù)據(jù)結構中。之后在這個結構體中對當前線程的ID與存儲的線程ID做對比,來決定操作是被“允許”,還是“需要”(permitted/required)。

同樣,作為線程和本地存儲不適配的替代方案,線程ID在容器中可作為鍵值。例如,容器可以存儲其掌控下每個線程的信息,或在多個線程中互傳信息。

std::thread::id可以作為一個線程的通用標識符,當標識符只與語義相關(比如,數(shù)組的索引)時,就需要這個方案了。也可以使用輸出流(std::cout)來記錄一個std::thread::id對象的值。

std::cout<<std::this_thread::get_id();

具體的輸出結果是嚴格依賴于具體實現(xiàn)的,C++標準的唯一要求就是要保證ID比較結果相等的線程,必須有相同的輸出。