關於執行緒的幾個函式

小二郎**發表於2019-05-25
 
5個基本執行緒函式
 
pthread_create函式
當一個程式啟動時,這個時候主執行緒也叫初始執行緒就建立了。其餘執行緒則有pthread_create函式建立。
 
#include <pthread.h>
int pthread_create(pthread_t *tid, const pthread_attr_t *attr,
void *(*func)(void *),void *arg);
返回:若成功則為0,若出錯則為正的Exxx值
 
每個執行緒都有一個執行緒id(thread ID)標識,如果新的執行緒建立成功,其ID就通過tid指標返回。
 
然後我們來看下最後一個引數,這個是執行緒執行的函式和引數,該執行緒通過呼叫這個函式開始執行,然後或者顯式的終止(通過呼叫pthread_exit),或者隱式的終止(通過讓該函式返回)。該函式的地址由func引數指定,該函式的唯一呼叫引數是指標arg。如果我們需要傳遞多個引數,我們就要把他們打包成一個結構,傳給這個引數。
 
pthread_join函式
可以通過呼叫pthread_join函式等待一個給定執行緒終止.
 
#include <pthread.h>
int pthread_join(pthread_t *tid,void **status);
返回:若成功則為0,若出錯則為正的Exxx值
 
第一個引數tid就是需要等待的那個執行緒id,status這個引數如果非空,那麼來自所等待執行緒的返回值將存入由status指向的位置。
 
也就是說通過呼叫這個函式,我們可以獲取到該執行緒退出的狀態的資料,當然這個執行緒的狀態必須是可匯合的(joinable,預設值)
 
什麼意思呢?就是說如果某個執行緒的狀態是可匯合的(joinable),那麼別的執行緒就可以通過pthread_join獲取到該執行緒的退出狀態和執行緒id,如果設定為脫離的(detached),那麼當該執行緒終止時,所有相關資源全部釋放,我們不能等待他們終止。
 
pthread_self函式
每個執行緒都有一個在所屬程式內標識自身的ID,執行緒ID由pthread_create返回,我們在上面那個函式中也用到了,每個執行緒可以使用pthread_self獲取自身的執行緒ID。
 
#include <pthread.h>
pthread_t pthread_self(void);
返回:呼叫執行緒的執行緒ID

 

pthread_detach函式
在說pthread_join函式的時候我們提到過執行緒的狀態,一種是可匯合的(joinable,預設值),一種是脫離的(detached),這個函式的作用就是把某個執行緒的狀態變為脫離的(detached)。
 
#include <pthread.h>
int pthread_detach(pthread_t tid);
返回:若成功則為0,若出錯則為正的Exxx值
 
本函式通過由想讓自己脫離的執行緒呼叫,就如以下語句,
pthread_detach(pthread_self());
 
pthread_exit函式
讓一個執行緒終止的方法之一是呼叫pthread_exit。
#include <pthread.h>
void pthread_exit(void *status);
不返回到呼叫者
如果本執行緒未曾脫離,它的執行緒ID和退出狀態將一直留存到呼叫程式內的某個其他執行緒對它呼叫pthread_join。

相關文章