搜索
熱搜: 活動 交友 discuz
查看: 4341|回復: 0
打印 上一主題 下一主題

[教學] C++多執行緒(十)

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-8-14 04:43:59 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
  1. 多執行緒使用總結

  2. 基礎:
  3. 1)最好使用C++ runtime的函數創建執行緒,即調用_beginthreadex創建執行緒。CreateThread()函數並不會執行C運行時資料塊的變量的每執行緒初始化,因此在任何使用C運行時庫的應用中,不能使用CrateThread()函數。
  4. 2)最好不要顯示的調用ExitThread()或TerminateThread(),因為調用這些不進行清理工作。
  5. 3)SuspendThread()掛起執行緒時,要考慮該執行緒是否擁有Mutex或Semaphore,如果擁有的話可能會導致死鎖。
  6. 4)信號量Semaphore,是一個可以限制對指定的臨界段進行訪問的執行緒的數目的資料結構。
  7. 5)互斥量Mutex和關鍵代碼段CriticalSection,他們的作用是相同的,都是用來保證某時刻只有一個執行緒能夠訪問全局或靜態的資源。區別是:Mutex是內核對象,可以設置等待超時時間,可以在不同的進程的執行緒中使用,但是所消耗的時間也比較多。CriticalSection與Mutex相反。
  8. 6)互鎖函數,可以用來實現原子操作。對於一些簡單的問題,比如說int變量的自加,交換。。。
  9. 7)執行緒局部存儲(TLS),可以為全局或靜態變量對不同的執行緒有不同的拷貝。

  10. 高級:
  11. 8)執行緒池,可以實現在程序中根據需要動態的創建執行緒,比如在server端,根據訪問的用戶的多少來創建執行緒的多少。在windows2000以後增加了創建執行緒池的API,比如 QueueUserWorkItem()。
  12. 9)執行緒的優先級,用來保證重要的事情先被完成。不能使用執行緒的優先級來解決執行緒的同步問題。
  13. 10)處理器親和,就是將執行緒固定在某cpu上執行,這樣在某些情況下有助於提高性能,例如我們有雙核的且支援超執行緒技術的cpu,我們有4個執行緒,有2個是IO操作,有2個是大量的計算,對於上面的問題,我們就可以使用處理器親和,使用API設置,來達到cpu使用的均和,更好的提高性能。
  14. 11) 纖程,用戶級的執行緒機制,比執行緒小的單位,開發人員負責管理纖程的調度,同時負責確定纖程何時線上程時間片上下文中運行,一般不會帶來性能的提高,主要的目的是為開發人員調度多個不需要並行執行的任務提供一個便捷的機制。
  15. 12) 是否需要使用多執行緒,最總是需要測試來決定的,而且對於不同的CPU結果也不相同。避免使用過多的執行緒而帶來性能下降。


  16. 其他多執行緒技術:
  17. 13) MFC多執行緒,多Windows多執行緒API的封裝。
  18. 14) Boost多執行緒。
  19. 15) POSIX,Pthreads,是一個可以移植的多執行緒庫。一般是Linux和Unix是商用較多。
  20. 16) Intel Open MP+,是一種可移植的多執行緒解決方案。([url]www.openmp.org[/url])。



  21. 多執行緒調試:
  22. 17) 支援多執行緒的Log。
  23. 18) VS2005中,可以查看Thread窗口,掛起或恢復執行緒,切換當前的執行緒和檢查執行緒狀態。或是使用TracePoint來輸出消息到output。
  24. 19)使用SetThreadName()來對執行緒命名,使用執行緒信息block ([url]http://www.codeproject.com/threads/xtib.asp[/url])。
  25. 20) 使用Intel多執行緒執行緒檢測器,Intel調試器。。。

複製代碼
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

本論壇為非營利之網路平台,所有文章內容均為網友自行發表,不代表論壇立場!若涉及侵權、違法等情事,請告知版主處理。


Page Rank Check

廣告刊登  |   交換連結  |   贊助我們  |   服務條款  |   免責聲明  |   客服中心  |   中央分站

手機版|中央論壇

GMT+8, 2026-6-4 11:39 , Processed in 0.034094 second(s), 18 queries .

Powered by Discuz!

© 2005-2015 Copyrights. Set by YIDAS

快速回復 返回頂部 返回列表