最近發現以前工作中寫的**有個比較嚴重的bug,在這裡做一下筆記,並做適當擴充套件,防止以後出現類似的問題。
有兩種方法可以設定執行緒為分離執行緒,分別是建立時設定執行緒屬性和呼叫pthread_detach.下面分別來介紹這兩種方法。
建立執行緒時,可以通過pthread_create的第二個引數傳遞執行緒屬性。執行緒有許多屬性可以設定,比如堆疊大小、排程方式等,我們這裡只設定分離屬性,方法如下:
1.初始化乙個執行緒屬性物件。
#include
int pthread_attr_init(pthread_attr *attr);
2.設定分離屬性。
#include
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
int pthread_attr_getdetachstate(pthread_attr_t *attr, int *detachstate);
這兩個函式乙個用於設定狀態,乙個用於獲取。設定狀態用的兩個標誌分別為pthread_create_joinable和pthread_create_detached.後乙個用於設定執行緒為分離執行緒。設定為分離態後,就不能呼叫pthread_join來獲取執行緒的退出狀態了。
3.建立執行緒,並把設定好的執行緒屬性物件傳遞給pthread_create函式。
完整**如下,**比較簡略,沒有進行錯誤處理,實際寫**最好判斷一下呼叫函式的返回值,以確定函式執行成功:
pthread_t a_thread;
pthread_attr_t thread_attr;
pthread_attr_init(&thread_attr);
pthread_attr_setdetachstate(&pthread_attr, pthread_create_detach);
pthread_create(&a_thread, &thread_attr, thread_function, null);
pthread_attr_destroy(&pthread_attr);
根據pthread_detach的man手冊給出的例子,在子執行緒啟動後,通過如下方式呼叫:
pthread_detach(pthread_self());
多執行緒學習筆記 安全退出執行緒
執行緒退出有多種方法,我們先來演示執行緒.stop 方法,此方法用於強制結束乙個執行緒 threadobj.stop 我們現在來看一下示例 上面方法分別使變數i和變數j分別間隔100毫秒後自增,並且輸出對應的值,可以看到,現成正常退出!但是我們翻看 可以發現,stop 方法已經被標為過時,並不推薦使...
pthread cancel 完美退出執行緒
pthread cancel 完美退出執行緒 程式 include include include include void cleanup void void test pthread void pthread cleanup pop 0 return null int main sleep 1 ...
如何寫出執行緒安全的類和函式
什麼是執行緒安全的類和函式,可以被多個執行緒呼叫而不會出現資料的錯亂的類和函式被叫做執行緒安全的類和函式,首先導致執行緒不安全的根本原因是我們函式中或著類中的共享成員變數 如類靜態成員變數,全域性變數 當我們的函式中或者類中有這些變數時他們都是非執行緒安全的,當有多個執行緒呼叫這些函式或者物件時,就...