C語言設定執行緒的取消型別和狀態

2021-10-09 14:36:54 字數 1312 閱讀 4390

1.相關函式介紹

a.

int pthread_cancel(pthread_t thread)
傳送終止訊號給thread執行緒,如果成功則返回0,否則為非0值。傳送成功並不意味著thread會終止。

b.

int pthread_setcancelstate(int state,   int *oldstate)
設定本執行緒對cancel訊號的反應,state有兩種值:pthread_cancel_enable(預設)和pthread_cancel_disable,

分別表示收到訊號後設為cancled狀態和忽略cancel訊號繼續執行;old_state如果不為null則存入原來的cancel狀態以便恢復。

c.

int pthread_setcanceltype(int type, int *oldtype)
設定本執行緒取消動作的執行時機,type由兩種取值:pthread_cancel_deffered和pthread_cancel_asychronous,僅當cancel狀態為enable時有效,分別表示收到訊號後繼續執行至下乙個取消點再退出和立即執行取消動作(退出);oldtype如果不為null則存入運來的取消動作型別值。

d.

void pthread_testcancel(void)
附:什麼是取消點:

取消點是如何出現的呢?

e.

int pthread_join(pthread_t thread, void **value_ptr);
thread:等待退出執行緒的執行緒號。

value_ptr:退出執行緒的返回值。

1.同步取消執行緒

**示例:

#include#include#include void *thread_fun(void *arg)  

return (void *)0;

} int main()

2.非同步取消執行緒

示例**:

#include#include#include void *thread_fun(void *arg)  

return (void *)0;

} int main()

此外,在使用pthread_exit()函式去主動退出執行緒時(一般放在末尾),如果遇到其它執行緒發來的pthread_cancel(),那麼函式pthread_exit()是不會去執行的,帶有返回值時,並且在其它執行緒,解引用使用該值時,會出現段錯誤。

C語言設定和取得socket狀態的相關函式用法

c語言setsockopt 函式 設定socket狀態 標頭檔案 include include 定義函式 int setsockopt int s,int level,int optname,const void optval,socklen toptlen 函式說明 setsockopt 用來設...

執行緒的狀態型別和相互轉換

寫部落格的目的是為了自己學習和複習,許多解釋來自於網上大牛,文章非原創。能幫助到別人當然更好不過,水平有限,可能有許多錯誤,歡迎指正。新建狀態 new 新建立了乙個執行緒物件 就緒狀態 runnable 執行緒物件建立後,其他執行緒呼叫了該物件的start 方法。該狀態的執行緒位於可執行執行緒池中,...

Lua的執行緒和狀態

那不是真的多執行緒 lua不支援真正的多執行緒,這句話我在 lua中的協同程式 這篇文章中就已經說了。根據我的程式設計經驗,在開發過程中,如果可以避免使用執行緒,那就堅決不用執行緒,如果實在沒有更好的辦法,那就只能退而用之。為什麼?首先,多個執行緒之間的通訊比較麻煩,同時,執行緒之間共享記憶體,對於...