剛學c++多線程,需要從哪些方面入手,有推薦的教程或書籍嗎?
01-15
Synchronization (Windows)
學完幾個線程的API之後,得通讀這一章的全文,獲取正確的知識昨天剛剛看到的,推薦下:作者:HaippyC++11 並髮指南系列
說說我的學習經歷:一開始是看《Unix環境高級編程》關於線程的基本api和使用方法;之後看陳碩大大的《Linux多線程服務端編程》裡面關於多線程有很多乾貨;然後就是工程上的實踐了。
《C++並發編程實戰》那本書我自己也有一本(好多人推薦的),但對我來說看起來還是有些吃力,應該是我的能力還沒到吧
初學多線程,一定要弄明白操作系統為什麼要引入線程的概念,引入線程後帶入了哪些的缺陷(或問題),通常有哪些解決線程問題的方法1. 《操作系統》:進程、線程基本概念及區別,線程的並發方面有哪些經典問題2. 《Unix環境高級編程》:見識並學習線程處理函數,根據習題做測試練習,對不明白的地方就寫小測試程序3. 在實際工程項目中運用所學知識,有機會了解及運用一些線程庫,Boost線程庫
主要就是幾個Windows的基本同步機制,比如臨界區,信號量,互斥量,事件。高清楚哪種性能更好,哪種是內核態的同步對象,哪種是用戶態的同步對象,內核態的用在什麼場合,用戶態的用在什麼場合。區分什麼是UI線程什麼是Worker線程,然後自己寫點程序。你說的所謂C++的多線程,底層都是通過這些東西實現的,好好了解下吧。
搞清楚多線程編程的本質問題,再去看C++的解決方案。
1. 如何保證共享變數的可見性。看一些內存屏障的相關文章,http://www.puppetmastertrading.com/images/hwViewForSwHackers.pdf。
2. 如何保證操作的原子性。了解各種鎖的基本原理。學多線程一定要看書,學學理論 ,光靠api說明和嘗試是不行的。坑太多了。和c++本身相關的坑也太多了。c++方面有一本書挺好
多寫demo多入坑。從坑中學習:卧槽,這個對象怎麼被釋放了?卧槽,這個值不對啊!卧槽,怎麼程序不理我了,看狀態還很正常啊?卧槽,數據輸出怎麼不一致了?
剛學完多線程就去學windows 或者 linux api, 絕逼是被坑的體無完膚. 要處理的細節太多又不明就裡. 從學習曲線上來說, 可以先走多線程高並發的路子, 然後再返回來學習系統api
MSDN concurrency runtime
先搞懂pthread和windows系統編程。
多線程這種跟系統有關的就得去研究win32和linux的api了啊。
當然啦,比較懶的話直接去學c++11的thread也是可以的,哪怕是百度也資料很多。以上講的只是api而已,多線程的一些原理思路之類的話,網上也能搜到的。我是老師在課上教的 然而用的時候還是得靠自己絞盡腦汁的想。推薦閱讀:
※多線程引用計數如何釋放?
※C++中如何將函數調用轉發至另一個線程?
※互斥鎖,同步鎖,臨界區,互斥量,信號量,自旋鎖之間聯繫是什麼?
※C# 如何在調用控制項時做到 Thread-safe(線程安全)?
※多線程是否有意義?