建立執行緒:
intpthread_create(pthread_t *restrict thread,
const
pthread_attr_t *restrict attr,
void
*(*start_routine)(
void
*),
void
*restrict arg);
引數:
thread
輸出執行緒id
attr
執行緒屬性, 預設null
start_routine
執行緒執行函式
arg
執行緒執行引數
note:函式成功返回0 否則返回錯誤碼
標頭檔案 pthread.h
庫檔案 pthread
退出執行緒:
intpthread_exit(
void
* value_ptr);
引數:
value_ptr
執行緒返回值指標
note: ptrhead_exit()退出呼叫此函式的執行緒並釋放該執行緒占用的資源
標頭檔案 pthread.h
庫檔案 pthread
等待指定執行緒結束:
intpthread_join(pthread_t thread,
void
**value_ptr);
引數:
thread
乙個有效的執行緒id
value_ptr
接收執行緒返回值的指標
note:呼叫此函式的執行緒在指定的執行緒退出前將處於掛起狀態或出現錯誤而直接返回
如果value_ptr非null則value_ptr指向執行緒返回值的指標
函式成功後指定的執行緒使用的資源將被釋放
標頭檔案 pthread.h
庫檔案 pthread
獲取當前執行緒id:
pthread_t pthread_self(
void);
引數:
note:返回當前函式的id
標頭檔案 pthread.h
庫檔案 pthread
互斥:
說到多執行緒,最關心的就是資料訪問
/改變的同步問題。
windows
下有臨界區和訊號事件等手段來防止多個執行緒同時讀
/寫同乙個資料,那麼
linux呢?
多執行緒變成時多使用互斥
pthread_mutex_t
來起到防止同時訪問或改變同一資料.
建立互斥:
intpthread_mutex_init(pthread_mutex_t *restrict mutex,
const
pthread_mutexattr_t *restrict attr);
引數:
mutex
輸出互斥id
attr
互斥屬性, 預設null
note:函式成功返回0 否則返回錯誤碼
標頭檔案 pthread.h
庫檔案 pthread
鎖住互斥:
intpthread_mutex_lock(pthread_mutex_t *mutex);
引數:
mutex
互斥id
note:如果指定的互斥id已經被鎖住那麼呼叫執行緒在互斥id完全解鎖前將
一直處於掛起狀態,否則將鎖住互斥體
標頭檔案 pthread.h
庫檔案 pthread
intpthread_mutex_trylock(pthread_mutex_t *mutex);
引數:
mutex
互斥id
note:如果指定的互斥id已經被鎖住那麼將直接返回乙個錯誤,通過判斷
此錯誤來進行不同的處理
標頭檔案 pthread.h
庫檔案 pthread
解鎖互斥:
intpthread_mutex_unlock(pthread_mutex_t *mutex);
引數:
mutex
互斥id
note:如果指定的互斥id已經被鎖住那麼對其解鎖
標頭檔案 pthread.h
庫檔案 pthread
釋放互斥:
intpthread_mutex_destroy(pthread_mutex_t *mutex);
引數:
mutex
互斥id
note:釋放指定的mutex占用的資源
標頭檔案 pthread.h
庫檔案 pthread
Linux多執行緒程式設計入門 2
執行緒的分離狀態決定乙個執行緒以什麼樣的方式來終止自己。在上面的例子中,我們採用了執行緒的預設屬性,即為非分離狀態,這種情況下,原有的執行緒等待建立的執行緒結束。只有當 pthread join 函式返回時,建立的執行緒才算終止,才能釋放自己占用的系統資源。而分離執行緒不是這樣子的,它沒有被其他的執...
Linux多執行緒程式設計入門 3
3 條件變數 前一節中我們講述了如何使用互斥鎖來實現執行緒間資料的共享和通訊,互斥鎖乙個明顯的缺點是它只有兩種狀態 鎖定和非鎖定。而條件變數通過允許執行緒阻塞和等待另乙個執行緒傳送訊號的方法彌補了互斥鎖的不足,它常和互斥鎖一起使用。使用時,條件變數被用來阻塞乙個執行緒,當條件不滿足時,執行緒往往解開...
Linux 多執行緒程式設計入門 執行緒函式解釋
建立執行緒 intpthread create pthread t restrict thread,const pthread attr t restrict attr,void start routine void void restrict arg 引數 thread 輸出執行緒id attr ...