c語言在標準庫中為程式設計師提供了多執行緒操作介面。
int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine) (void *arg), void *arg)
執行緒建立
int pthread_join( pthread_t thread, void * * value_ptr )
執行緒等待
int pthread_detach(pthread_t thread)
執行緒分離
int pthread_exit(pthread_t th, void **thr_return)
執行緒結束
pthread_t是表示執行緒號的資料型別。它的出處是/usr/include/bits/pthreadtypes.h。
typedef unsigned long int pthread_t
執行緒建立函式,為新執行緒分配資源並且建立成功後執行緒即開始執行,新執行緒的執行緒號即傳參進去的執行緒號。
通過第二個引數指定新執行緒的屬性為「joinable」或「detached」,預設為joinable。若執行緒屬性為joinable,則需要由其他執行緒呼叫pthread_join阻塞等待其結束並為之**資源,不然就成了"殭屍執行緒";若執行緒屬性為detached,則執行緒結束後自動**所有資源。
int pthread_create(pthread_t *thread, 目標執行緒的執行緒號
pthread_attr_t *attr, 設定執行緒的屬性
void *(*start_routine) (void *arg), 目標函式的起始位址
void *arg) 目標函式的引數
當呼叫pthread_join時,當前執行緒進入阻塞狀態,等待被連線的執行緒執行結束返回,當前執行緒再轉回執行狀態。被連線的執行緒必須是非分離的。乙個執行緒不能被多個執行緒等待。
int pthread_join( pthread_t thread, 目標執行緒的執行緒號
void * * value_ptr ) 目標執行緒的返回值
將joinable的執行緒設定為detached的執行緒。這樣該執行緒在執行結束後會自動**其所有資源。
呼叫pthread_exit可以顯式地結束當前執行緒,傳入的唯一的引數是執行緒的返回值。
//兩種方法對鎖進行初始化
pthread_mutex_t mutex = pthread_mutex_initializer;
int pthread_mutex_init(pthread_mutex_t *restrict mutex,
const pthread_mutexattr_t *restrict attr);
//互斥鎖的銷毀
int pthread_mutex_destroy(pthread_mutex_t *mutex);
//獲得鎖
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
//釋放鎖
int pthread_mutex_unlock(pthread_mutex_t *mutex);
// 初始化條件變數
int pthread_cond_init(pthread_cond_t *cond,
pthread_condattr_t *cond_attr);
// 阻塞等待
int pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex);
// 超時等待
int pthread_cond_timewait(pthread_cond_t *cond,pthread_mutex *mutex,
const timespec *abstime);
// 解除所有執行緒的阻塞
int pthread_cond_destroy(pthread_cond_t *cond);
// 至少喚醒乙個等待該條件的執行緒
int pthread_cond_signal(pthread_cond_t *cond);
// 喚醒等待該條件的所有執行緒
int pthread_cond_broadcast(pthread_cond_t *cond);
在vs中加入c語言檔案的方法
環境vs2010 1.將c語言加入工程中,右鍵該檔案,選擇屬性 預編譯頭 不使用預編譯頭,否個會提示 fatal error c1853 filename 預編譯標頭檔案來自編譯器的早期版本,或者預編譯頭為 c 而在 c 中使用它 或相反 參考 2.在extern要呼叫的函式的位置,加入 ifdef...
QT學習記錄(二)在QT中加入多執行緒的方式
近期在解析ts流檔案時發現資料量太大,如果在主線程處理會造成介面卡頓,所以需要在qt中加入多執行緒完成解析資料工作。通常qt內加入多執行緒有三種比較方便的方式 分割線 1.movetothread 新建乙個繼承qobject a,然後將耗時的工作函式 void dowork 寫到這類裡面,在主線程n...
多執行緒在實際專案中的簡單應用
專案中如何使用多執行緒專案業務場景 批量頁面靜態化 在系統中,商品詳情頁我們使用freemarker來進行頁面靜態化,每天夜裡12點開始要對所有商品頁面進行一遍靜態化,由於商品數量比較多 如果使用單執行緒將耗時過長,我們使用乙個定長線程池進行批量執行,將任務放在佇列中,多個執行緒同時領取並執行。訂單...