1. 程式人生 > >C/C++ 四種結束執行緒方式詳解

C/C++ 四種結束執行緒方式詳解

一、四種方式

    1、執行緒自然return返回。

    2、呼叫 _endthreadex()函式或 ExitThread()函式。

    3、在同一個程序的另一個執行緒中呼叫 TerminateThread()函式。

    4、如果該執行緒位於某程序, 且該程序僅有這一個執行緒, 可直接結束程序以結束此執行緒。

二、安全性分析

        1、執行緒通過執行緒函式return返回而終止執行緒是最安全的, 當然我們設計也期望是這樣結束執行緒。線上程函式return後會清理執行緒函式內申請的類物件, 即呼叫這些物件的解構函式, 然後會自動呼叫 _endthreadex()函式來清理 _beginthreadex(…)函式申請的資源(主要是建立的tiddata物件)。

        2、如果使用_endthreadex()函式或 ExitThread()函式這兩種方法退出執行緒, 則不會執行執行緒函式的return語句, 所以就不會呼叫執行緒函式作用域內申請的類物件的解構函式, 可能會造成記憶體洩露。

        3、同一程序中的另一執行緒呼叫TerminateThread()函式, 同樣可能造成記憶體洩漏,而且由於該程序沒有結束, 可能會多次建立結束執行緒, 造成嚴重的記憶體洩漏。

        4、通過結束程序去結束執行緒, 結果與上面類似。

三、總結

        並不是說所有執行緒都只能通過return返回, 只能說通過return結束執行緒,不會因為寫程式的失誤造成記憶體洩漏。如果在能確保釋放記憶體的前提下, 也可以使用其他三種方式結束執行緒(謹慎使用

)。

由於能力和經驗限制,文章未能詳盡和深入進行講解。上述部分如有錯誤,歡迎指正和交流。