執行緒的正確結束方式

2021-04-15 02:57:58 字數 928 閱讀 5448

在使用c語言進行多執行緒程式設計時,最重要的是執行緒怎麼結束,而不是它怎麼開始。多執行緒程式設計的主要問題,是需要執行緒「正確」結束,我們在程式設計中應該盡量避免使用系統提供的使執行緒強制結束的函式,而應該使用一定的同步方式,保證執行緒分配的資源得到正確地處理,避免記憶體洩漏。很多人在進行多執行緒程式設計時不注意執行緒的結束方式,從而及其容易導致程式的記憶體資源不釋放,檔案、套接字未關閉。這些問題容易對程式造成傷害,特別是在程式的測試時期導致空指標錯誤而程式崩潰,而且是非常難以察覺的。以下是需要注意的地方:

(1) 分清每個執行緒的責任,對於程式資源的初始化和刪除盡量在同乙個執行緒中進行。

(2) 使用執行緒同步,如果a執行緒初始化資源a,而由b執行緒來刪除,那麼使用訊號量,互斥量等方式進行同步。

(3) 執行緒自身的結束。盡量使用pthread_join(unix)(或者waitforsingleobject(windows))進行執行緒等待的結束。同時檢查執行緒的返回值,保證程式的正確性。

(4) 對於進行迴圈任務的執行緒,不要使用while(true)的方式,最好在while迴圈裡放個變數,並在其他執行緒使用這個標誌結束之。

typedef 

struct

thread

//create the thread, this is easy.

thread_t

*thread_create(

void

*func, 

intprio, 

intstacksize, 

void

*args)

//exit the thread, this is hard

intthread_exit(thread_t 

*thread)

//thread function, important

void

*thread_task(

void

*arg)

通過Event事件正確結束執行緒

步驟 1 首先宣告乙個全域性的event物件 handle hrequestexitevent false 2 在主線程中建立這個event物件 hrequestexitevent createevent null,true,false,null 注意 此處的第三個引數應該使用false,因為如果使...

通過Event事件正確結束執行緒

步驟 1 首先宣告乙個全域性的event物件 handle hrequestexitevent false 2 在主線程中建立這個event物件 hrequestexitevent createevent null,true,false,null 注意 此處的第三個引數應該使用false,因為如果使...

併發 啟動執行緒的正確方式

方法含義 啟動新執行緒 方法進行的時候,首先是主線程啟動了start 方法,通知jvm,來啟動新執行緒,執行緒何時執行由執行緒排程器決定,該方法執行並不代表內部邏輯已經執行了,執行與否完全由執行緒排程器決定。由此,呼叫start方法順序並不代表執行緒的執行順序。呼叫start方法執行,其實會讓兩個執...