linux多執行緒

2021-08-20 08:27:36 字數 2934 閱讀 6466

原型:int pthread_create(pthread_t *thread,

const pthread_attr_t *attr,

功能:建立新的執行緒,成功返回0,失敗返回錯誤編號  

引數:thread:用來儲存新建立的執行緒id  

attr:乙個指向pthread_attr_t結構的指標,指向的結構決定了新建立的執行緒的屬性,如優先順序等。可為null,表示採用預設屬性。  

start_routine:函式指標。建立執行緒與建立程序後的執**況不同。建立程序後,子程序順著**執行下去,而建立執行緒,執行緒是從乙個指定的函式入口開始執行。start_routine指向了執行緒的函式入口  

arg:執行緒函式入口需要乙個引數void *,arg就是該引數,可為null  

多程序程式中,父程序的退出不會導致子程序的退出;而在多執行緒程式中,程序結束時,該程序所建立的執行緒也會結束執行。所以多執行緒程式中程序需要等待其執行緒結束才能結束。

二、pthread_join

原型:int pthread_join(pthread_t thread,void *retval)  

功能:等待執行緒結束,成功返回0,失敗返回錯誤編號  

引數:thread:要等待結束的執行緒的id  

retval:儲存執行緒結束時的狀態,一般為null  

三、pthread_exit

原型:void pthread_exit(void *retval)  

功能:結束執行緒  

引數:retval:執行緒返回的值,可與pthread_join中的引數retval配合使用,但一般設為null  

在實際應用中,多個執行緒往往會訪問同一資料或資源,為避免執行緒之間相互影響,需要引入執行緒互斥機制,而互斥鎖是互斥機制中的一種。

四、pthread_mutex_init

原型:int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr)  

標頭檔案:

功能:初始化互斥鎖,成功返回0,失敗返回錯誤編號  

引數:mutex:要初始化的互斥鎖的指標  

attr:用於設定互斥鎖的屬性,一般設為null,表示預設屬性  

五、pthread_mutex_lock

原型:int pthread_mutex_lock(pthread_mutex_t *mutex)  

標頭檔案:

功能:獲取互斥鎖,成功返回0,失敗返回錯誤編號  

引數:mutex:要獲取的互斥鎖的指標  

六、pthread_mutex_unlock

原型:int pthread_mutex_unlock(pthread_mutex_t *mutex)  

標頭檔案:

功能:釋放互斥鎖,成功返回0,失敗返回錯誤編號  

引數:mutex:要獲取的互斥鎖的指標  

#include #include #include #include void *thread_function(void *arg);

char message = "hello world";

int main()

printf("waiting for thread to finish.../n");

res = pthread_join(a_thread, &thread_result);

if (res != 0)

printf("thread joined, it returned %s/n", (char *)thread_result);

printf("message is now %s/n", message);

exit(exit_failure);

}void *thread_function(void *arg)

執行緒互斥:程序建立出兩個執行緒,兩個執行緒互斥

#include#include#includepthread_mutex_t mutex;  

pthread_t thread[2];

int number=0;

void* work1(void *)

pthread_exit(null);

} void* work2(void *)

pthread_exit(null);

} int main()

多個執行緒按照規定的順序執行,即為執行緒同步。執行緒同步可利用全域性變數來實現,但這會導致執行效率低下,應採用專用的函式來實現同步。

初始化:pthread_cond_t cond_ready=pthread_cond_initializer;  

等待條件成熟:pthread_cond_wait(&cond_ready, &mut);  

設定條件成熟:pthread_cond_signal(&cond_ready);

#include#include#includepthread_mutex_t mutex;  

pthread_t thread[2];

int number=0;

pthread_cond_t cond_ready=pthread_cond_initializer;

void* work1(void *)

sleep(1);

} pthread_exit(null);

} void* work2(void *)

number=0;

printf("work2:%d\n",number);

pthread_mutex_unlock(&mutex);

pthread_exit(null);

} int main()

linux多執行緒

linux下為了多執行緒同步,通常用到鎖的概念。posix下抽象了乙個鎖型別的結構 ptread mutex t。通過對該結構的操作,來判斷資源是否可以訪問。顧名思義,加鎖 lock 後,別人就無法開啟,只有當鎖沒有關閉 unlock 的時候才能訪問資源。它主要用如下5個函式進行操作。1 pthre...

linux多執行緒

執行緒標識 就像每個程序都有乙個id一樣,執行緒也有自己的id。程序id用pid t來表示,他是乙個unsigned int。程序id用pthread t來表示,pthread t不能把它當整數處理。程序可以通過pthread self 函式獲得自身的執行緒id。執行緒建立 在程序中只有乙個控制線程...

Linux多執行緒

一 執行緒的特點 1.執行緒是程序的乙個執行流,是cpu排程和分配的基本單位。執行緒是程式執行的最小單位。2.執行緒不會影響到其它執行緒的執行。比如乙個執行緒崩潰,其它執行緒正常執行。3.同一程序內的執行緒共享程序的位址空間。二 乙個執行緒的組成 1.乙個指向當前被執行指令的指令指標 2.乙個棧空間...