C/C++ 四種結束執行緒方式詳解
阿新 • • 發佈:2018-12-26
一、四種方式
1、執行緒自然return返回。
2、呼叫 _endthreadex()函式或 ExitThread()函式。
3、在同一個程序的另一個執行緒中呼叫 TerminateThread()函式。
4、如果該執行緒位於某程序, 且該程序僅有這一個執行緒, 可直接結束程序以結束此執行緒。
二、安全性分析
1、執行緒通過執行緒函式return返回而終止執行緒是最安全的, 當然我們設計也期望是這樣結束執行緒。線上程函式return後會清理執行緒函式內申請的類物件, 即呼叫這些物件的解構函式, 然後會自動呼叫 _endthreadex()函式來清理 _beginthreadex(…)函式申請的資源(主要是建立的tiddata物件)。
2、如果使用_endthreadex()函式或 ExitThread()函式這兩種方法退出執行緒, 則不會執行執行緒函式的return語句, 所以就不會呼叫執行緒函式作用域內申請的類物件的解構函式, 可能會造成記憶體洩露。
3、同一程序中的另一執行緒呼叫TerminateThread()函式, 同樣可能造成記憶體洩漏,而且由於該程序沒有結束, 可能會多次建立結束執行緒, 造成嚴重的記憶體洩漏。
4、通過結束程序去結束執行緒, 結果與上面類似。
三、總結
並不是說所有執行緒都只能通過return返回, 只能說通過return結束執行緒,不會因為寫程式的失誤造成記憶體洩漏。如果在能確保釋放記憶體的前提下, 也可以使用其他三種方式結束執行緒(謹慎使用
由於能力和經驗限制,文章未能詳盡和深入進行講解。上述部分如有錯誤,歡迎指正和交流。