第1節
前言
(1)總述以及基礎要求、開發環境
(2)簡要自我介紹和講課特點
(3)出這門課程的主要目的
(4)在vs2017中創建一個工程方便后續的課程講解
章節2
正式開講
第1節
并發基本概念及實現,進程、線程基本概念
(1)并發、進程、線程的基本概念和綜述
(1.1)并發
(1.2)可執行程序
(1.3)進程
(1.4)線程
(1.5)學習心得
(2)并發的實現方法
(2.1)多進程并發
(2.2)多線程并發
(2.3)總結
(3)C++11新標準線程庫
第2節
線程啟動、結束,創建線程多法、join,detach
(1)范例演示線程運行的開始和結束
(1.1)thread
(1.2)join()
(1.3)detach()
(1.4)joinable()
(2)其他創建線程的手法
(2.1)用類,以及一個問題范例
(2.2)用lambda表達式
第3節
線程傳參詳解,detach()大坑,成員函數做線程函數
(1)傳遞臨時對象作為線程參數
(1.1)要避免的陷阱 (解釋1)
(1.2)要避免的陷阱 (解釋2)
(1.3)總結
(2)臨時對象作為線程參數繼續講
(2.1)線程id概念
(2.2)臨時對象構造時機抓捕
(3)傳遞類對象、智能指針作為線程參數
(4)用成員函數指針做線程函數
第4節
創建多個線程、數據共享問題分析、案例代碼
(1)創建和等待多個線程
(2)數據共享問題分析
(2.1)只讀的數據
(2.2)有讀有寫
(2.3)其他案例
(3)共享數據的保護案例代碼
第5節
互斥量概念、用法、死鎖演示及解決詳解
(1)互斥量(mutex)的基本概念
(2)互斥量的用法
(2.1)lock(),unlock()
(2.2)std::lock_guard類模板
(3)死鎖
(3.1)死鎖演示
(3.2)死鎖的一般解決方案
(3.3)std::lock()函數模板
(3.4)std::lock_guard的std::adopt_lock參數
第6節
unique_lock詳解
(1)unique_lock取代lock_guard
(2)unique_lock的第二個參數
(2.1)std::adopt_lock
(2.2)std::try_to_lock
(2.3)std::defer_lock
(3)unique_lock的成員函數
(3.1)lock()
(3.2)unlock()
(3.3)try_lock()
(3.4)release()
(4)unique_lock所有權的傳遞
第7節
單例設計模式共享數據分析、解決,call_once
(1)設計模式大概談
(2)單例設計模式
(3)單例設計模式共享數據問題分析、解決
(4)std::call_once()
第8節
condition_variable、wait、notify_one、notify_all
(1)條件變量std::condition_variable、wait()、notify_one()
(2)上述代碼深入思考
(3)notify_all()
第9節
async、future、packaged_task、promise
(1)std::async、std::future創建后臺任務并返回值
(2)std:: packaged_task
(3)std:: promise
(4)小結
第10節
future其他成員函數、shared_future、atomic
(1)std::future的其他成員函數
(2)std::shared_future
(3)原子操作std::atomic
(3.1)原子操作概念引出范例
(3.2)基本的std:: atomic用法范例
(3.3)老師的心得
第11節
std::atomic續談、std::async深入談
(1)原子操作std::atomic續談
(2)std::async深入談
(2.1)std::async參數詳述
(2.2)std::async和std::thread的區別
(2.3)std::async不確定性問題的解決
第12節
windows臨界區、其他各種mutex互斥量
(1)windows臨界區
(2)多次進入臨界區試驗
(3)自動析構技術
(4)recursive_mutex遞歸的獨占互斥量
(5)帶超時的互斥量std::timed_mutex和std::recursive_timed_mutex
第13節
補充知識、線程池淺談、數量談、總結
(1)補充一些知識點
(1.1)虛假喚醒
(1.2)atomic
(2)淺談線程池
(2.1)場景設想
(2.2)實現方式
(3)線程創建數量談
(4)c++11多線程總結 |