聯繫我們
 課程時長 28 時間:

課程簡介

並發性的挑戰與問題

  • 平台硬體限制:硬體執行緒、管道、快取一致性
  • 與多執行緒程式設計相關的基本概念(多執行緒程式正確性、活力、飢餓、死鎖、競爭條件、原子性、一致性模型、Flynn 分類法)
  • C++ 中實現多執行緒和多處理可用的機制
  • 標準庫的實現:從 C++14 到當前(C++2a)的元素
  • Boost 中可用的實現:與標準庫的差異

進程和執行緒

  • 多進程應用程式與多執行緒應用程式
  • 作業系統與執行緒(對可用實現的簡短概述)
  • 進程和執行緒的同步化機制
  • 同步化的結構化實現
  • 物件導向方法中多執行緒實現的特性(RAII 模式的角色)

C++ 中的記憶體模型

  • 物件與記憶體位置
  • 操作的排序及其強制
  • 關係:同步化、先行關係、操作對原子行為的排序、釋放序列
  • 記憶體屏障
  • 原子操作

C++14 及更新版本中的執行緒管理

  • std::thread 類及執行緒啟動
  • 執行緒識別
  • 附加和分離執行緒
  • 執行緒與標準容器
  • C++14 中執行緒的異常處理

互斥鎖定與臨界區

  • 簡單的互斥原則
  • 概念(可用鎖定物件的類型)
  • C++14 時間處理的快速介紹(chrono 庫)
  • std::mutex、std::timed_mutex、std::shared_mutex 類別及其衍生類別
  • 鎖處理中的 RAII 模式(std::lock_guard、std::unique_lock)
  • 依賴和延遲鎖定(std::lock)
  • 鎖和執行緒的所有權與共同所有
  • 讀者-作者問題
  • 一次性初始化
  • 執行緒本地(私有)記憶體(即 std::thread_local)

執行緒鎖定與同步

  • 信號燈上的操作
  • 遞迴鎖
  • 具有鎖定層級定義的鎖
  • 決策變數與鎖的合作
  • 活躍屏障和閒置屏障的實現(Idle Waits、Busy Waits)
  • 恢復執行緒運行
  • 執行緒之間的通信(Actor 模型和 CSP)

非同步任務

  • 非同步事件及其處理
  • futues(未來)
  • promises(承諾)
  • packaged_task(打包任務)

原子類型

  • 標準原子類型
  • 通用原子旗標(std::atomic_flag)
  • “std::atomic[T]”類模板及其特化
  • std::atomic 類型的實用函數(自由函數)

多執行緒 API 設計的特定性

  • 使用鎖設計結構:粗粒度和細粒度鎖定
  • 並發程式碼的效能:估算和測量技術
  • 資料分割
  • 解決方案的擴展性
  • 應用程式架構中的錯誤和異常情況處理

多執行緒應用程式的測試與除錯

  • 從多執行緒操作角度進行程式碼審查
  • 多執行緒應用程式測試的特定性
  • 單元測試
  • 增加意外情況發生概率以進行測試
  • 多執行緒應用程式測試的形式化方法
  • 多執行緒應用程式架構模式與測試和除錯(概述)

進階執行緒管理

  • 依賴執行緒(Sagi 模式)
  • 避免資料訪問競爭
  • 受控停止和中斷執行緒
  • 中斷阻塞調用
  • 處理中斷
  • 任務盜取
  • 在應用程式結束期間中斷任務

多執行緒設計模式

  • 多執行緒模式的類型和用途
  • 模式應用範圍
  • 執行緒池(Thread Pool)
  • 活躍物件模式(Active Object)
  • 安全的多執行緒隊列(Thread Safe Queue)
  • 生產者-消費者模式(Producer Consumer)
  • 監視器模式(Monitor)
  • GoF 模式的安全性

最低要求

  • 能夠使用 C++ 軟體建置工具,在 GNU/Linux 和/或 MS Windows 環境中操作。
  • 掌握進階和中高階級別的 C++ 程式設計議題(包括程序式和物件導向範式)。
  • 掌握泛型程式設計(模板)議題。

客戶評論 (1)

課程分類