pthread基本操作

2022-05-16 17:24:52 字數 1729 閱讀 9768

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg)

return value

on success, pthread_create() returns 0; on error, it returns an error

number.

函式引數:

1. pthread_t *thread, 傳入建立的pthread_t指標。

2.const pthread_attr_t *attr,修改程序的屬性,如果不設定則可以傳入null

3.void *(*start_routine) (void *)建立出來的程序執行的函式,返回型別為void*,並且需要帶引數void*

4. void *arg 傳入的函式引數。

在給函式傳引數的時候,如果只是單純的傳入數字,我們可以採用(大致的寫幾行偽**):

void* fun(void *arg)

main()

如果是在32位作業系統,此**中的argumenttype應該寫為int,因為void*指標的大小也是4位。

如果是在64位作業系統,此**中的argumenttype應該寫為long,因為void*指標的大小是8位,如果使用int會報錯而不通過編譯。

這裡採用int轉void*,而不是int* 轉 void*的原因是,如果實在多執行緒的建立過程中,傳遞的是位址,其他執行緒如果修改這個資料,在本執行緒的後續操作中會使資料改變而導致達不到自己想要的效果。

當我們需要傳遞多個引數的時候,便可以採用結構體,定義乙個結構體資料,然後通過指標傳遞給函式,接著轉換一下型別就好了。

typedef struct

retval*pretval;

void *fun1(void *arg)

intmain()

如果不**死亡的執行緒,便會產生殭屍執行緒。

pthread_detach使用來分離執行緒,如果我們使用了pthread_detach,那麼這個程序在執行完自己的任務之後便會自動死亡並**。

但是如果使用了detach之後,再使用join,join的返回值將會是錯誤的number,好像是22。

如果我們使用很多的執行緒,使用pthread_detach是有一點不太方便,這個時候我們便可以使用上面pthread_create函式的第二個引數來設定建立程序的屬性。

#include #include 

#include

#include

#include

void *fun(void *)

intmain()

需要注意的是需要初始化之後賦值才能使用,不然有可能會達不到你的期望。

pthread_cancel,是計算機語言,它傳送終止訊號給thread執行緒,如果成功則返回0,否則為非0值。

接下來我們聊聊exit,_exit,return,pthread_exit.

_exit():會結束整個程序,不論緩衝區是否有資料。

exit():會結束整個程序,緩衝區有資料就寫到指定的檔案描述符。

return:只是單純的返回到函式到用的地方,但是當main函式使用的時候,就會退出整個程序,所以要使用pthread_exit.如果是其他執行緒,則只會退出自己。

pthread_exit:只會退出單個執行緒,不影響其他執行緒。

linux下pthread基本操作

include include include include include include include include using namespace std define true 1 define false 0 static void thread1 void arg 列印執行緒建立時...

pthread的基本使用方法

今天寫了個程式,但是很鬱悶的是沒有得到預想的結果 pthread t tid int main void pthread attr t attr pthread attr init attr pthread attr setdetachstate attr,pthread create detach...

用Pthread實現多執行緒操作

學習pthread時的筆記和demo,感謝各路大神的分享 include include void thread void arg int main int argc,char const ar printf main thread.n int thread res null res pthread...