在標頭檔案 threads.h 中,定義和宣告了支援多執行緒的巨集、型別和函式。所有直接與執行緒相關的識別符號,均以字首 thrd_ 作為開頭。例如,thrd_t 是乙個物件型別,它標識了乙個執行緒。
建立並開始執行乙個新執行緒thrd_create():
int thrd_create(thrd_t *thr, thrd_start_t func, void *arg);
引數 func 是乙個指標,它指向在新執行緒需要被執行的函式,而 void 指標 arg 用於向該函式傳遞引數。換句話說,新執行緒將執行函式呼叫 func(arg)。
引數 func 的型別為 thrd_start_t,它被定義為 int(*)(void*)(這是乙個函式指標,指向乙個 void 指標作為其引數並返回乙個 int 值的函式),因此,該執行緒執行的函式返回乙個 int 型別的值。
程式在後續過程中可以通過呼叫函式 thread_join()獲得這個 int 型別的返回值(必要時,需等待該執行緒執行完)。
如果乙個執行緒啟動成功,函式 thread_create()將新執行緒寫入乙個物件進行標識,並通過引數 thr 指向該物件,然後返回巨集值 thread_success。
在大多數情況下,後續的其他操作均依賴於該執行緒的執行結果,並且只有當該執行緒完成後,才能執行其他操作。
thread_join() 用於確保乙個執行緒已完成:
int thrd_join(thrd_t thr, int *result);
呼叫 thread_join()的執行緒會被阻塞,直到通過 thr 標識的執行緒執行完成,這裡「阻塞」(block)指的是:執行緒會在呼叫 thread_join()的位置停留必要的時間。然後,thread_join()將執行緒 thr 中執行函式的返回值寫入指標 result 所引用的 int 變數中,假設 result 不是乙個空指標。最後,thread_join()釋放屬於執行緒 thr 的所有資源。
如果程式邏輯上並不需要等待執行緒 thr 結束,則應該呼叫以下函式:
int thrd_detach(thrd_t thr);
thrd_detach()使得當執行緒 thr 執行完成後,自動釋放執行緒占用的所有資源。一旦乙個執行緒執行了分離操作(呼叫 thrd_detach()),將不用程式等待其結束,程式也不會獲得該執行緒執行函式的返回值。對於每個建立的執行緒,呼叫 thread_join()或 thread_detach()不得超過一次。
C語言多執行緒程式設計基礎
我們進行多執行緒程式設計,可以有多種選擇,可以使用windowsapi,如果你在使用gtk,也可以使用gtk實現了的執行緒庫,如果你想讓你的程式有更多的移植性你最好是選擇posix中的pthread函式庫,我的程式是在linux下寫的,所以我使用了pthread庫 是不是很傷心,我知道有不少人期待的...
執行緒基礎知識 C語言 Linux
同乙個程序中的執行緒能共享程序中的絕大多數資源,當它們隨意競爭時可以導致資源會破壞 髒資料 不完整 不一致等問題。通過一些方法讓程序在競爭資源時相互協調,避免出現資料不完全 不一致等問題,這就叫執行緒同步。被多個執行緒同時訪問的 叫臨界區,被同時訪問的資源叫臨界資源。中間不會打斷的操作叫原子操作。p...
C 執行緒基礎
執行緒可以說是輕型的程序 多執行緒共享程序的位址空間和資源使得執行緒的上下文切換優於程序 由於執行緒共享資源就會有搶占資源的情況主要的手段有 互斥鎖 條件變數 訊號量等等 簡單回顧下c 多執行緒 include pthread create thread,attr,start routine,arg...