Re: [問題] 多執行緒程式撰寫技巧

看板C_and_CPP作者 (妳,我可以)時間8年前 (2016/01/30 00:23), 編輯推噓1(106)
留言7則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《Clangpp (Clang++)》之銘言: : 最近工作上常常遇到racing的問題,有夠麻煩的... : 通常都是用mutex或是 critical section來處理 : 那如果想要讓他可以發揮多核的能力 : 有哪些書或是網站專門在教C/C++的 multi-thread programming的技巧?? : 以上問題就懇請大家解答 我想你應該不是想學什麼哲學家吃飯的解法,multi-thread 跟所在的OS 有很大的關係,至少 Windows 早期沒有條件變數這個東西,但 pthread 1x 年前我接觸時就有了。 Windows: 如果你是要設計 NT service,微軟主推的是 IOCP(IO Completion Port), 也就是用 Thread-Pool + GetQueuedCompletionStatus 一系列 API。不過 你要是直接用 API 會吐血的,好在 boost 有包進去。 另一種避免使用 mutex 的方式就是用 TCP socket or named pipe 替代 記憶體直接讀寫+mutex,可以參考 zeromq。 書的話推薦侯捷這本 http://jjhou.boolan.com/jjtbooks-multithreaded-in-win32.htm 不過裡面 socket 的用法過時了千萬別學,個人認為如果你要找這方面的 書其實是 C# 最多。 Linux/UNIX: unix network programming volume 1,2 Advanced Programming in the UNIX Environment Richard Stevens 大師的書必讀,他去世後還有人接力幫他更新 因為 Linux 有 signal 需要處理,所以某種程度是比 win32 還要麻煩 事實上如果你兩邊都有經驗,你會發現微軟希望你用 thread,但 Linux 上 thread 其實不是很需要,尤其有了 epoll 這個神器後 有些應用根本就 single process or pre-forking + epoll 就搞定了。 個人建議是直接看目前最多人用的那幾套 open source project 原始碼 遠比看書收穫來得大,例如 memcached 有用 pthread,nginx 有用 pre-forking + epoll,這些軟體內在的 cocurrent programming 技巧是經過實戰考驗的,比書上過時的資訊有用太多。 個人經驗: thread 能少則少, mutex 能避免則避免, thread 一堆 + mutex 貼的跟 狗皮藥膏一樣的軟體從沒見過穩定的~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.228.131.237 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1454084599.A.E3F.html

01/30 09:39, , 1F
QQ 我目前是比較想要用C++11的native thread
01/30 09:39, 1F

01/30 09:39, , 2F
因為可以跨平台 而我其實是比較想看哲學的書XD
01/30 09:39, 2F

01/30 09:40, , 3F
不過還是謝謝你的推薦
01/30 09:40, 3F

01/31 12:51, , 4F
還是推薦原po看C++ concurrency in action, C++11的thread很
01/31 12:51, 4F

01/31 12:51, , 5F
單純容易使用,而且跨平台不用像這篇要學這麼多東西
01/31 12:51, 5F

02/03 00:53, , 6F
其實很難閃避平台特性,再說能跟OS API完美結合也是
02/03 00:53, 6F

02/03 00:53, , 7F
也是C/C++強項
02/03 00:53, 7F
文章代碼(AID): #1Mgv7tu_ (C_and_CPP)
文章代碼(AID): #1Mgv7tu_ (C_and_CPP)