1. 程式人生 > >Linux 執行緒管理

Linux 執行緒管理

Linux 執行緒管理

。 https://blog.csdn.net/swjtufq/article/details/53409638

相信大家用java語言寫執行緒已經很熟悉了,今天我們就來看下,在Linux下開發的時候怎麼進行執行緒的管理
1 pthread_create函式
建立一個執行緒
函式原型:int pthread_create((pthread_t thread, pthread_attr_t *attr, void start_routine)(void ), void *arg)
第一個引數是執行緒識別符號
第二個引數是執行緒的一些屬性,我們一般設定為NULL即可
第三個引數是執行緒的執行方法
第四個引數是傳入的值
返回值:成功,返回0;出錯,返回-1。
來看一個例子:
這裡寫圖片描述


我們用while(1)來防止程序死掉
執行結果:
這裡寫圖片描述

2 pthread_join函式
如果不想用while(1),可以用pthread_join來等待執行緒結束
函式原型:
int pthread_join(pthread_t thread, void **retval);
第一個引數是執行緒標示符
第二個引數用來儲存被等待執行緒的返回值
返回值 : 0代表成功。 失敗,返回的則是錯誤號

這裡寫圖片描述

執行結果:
這裡寫圖片描述

3 pthread_exit
函式原型:
void pthread_exit(void* retval);
引數代表返回給程序的值
這裡寫圖片描述

pthread_create的第三個引數是傳入執行緒的值

執行函式thread_function的引數就是剛才傳入執行緒的值

pthread_exit的引數是返回的值

pthread_join的第二個引數是最終獲取到的返回的值

執行結果:
這裡寫圖片描述

下面我們來看下建立多個執行緒:
這裡寫圖片描述

執行結果:
這裡寫圖片描述

我執行了多次,都發現是已經同步的了,不知道Linux核心做了什麼優化

如果我們想主動加上同步,可以通過互斥鎖的方式
初始化鎖。在Linux下,執行緒的互斥量資料型別是pthread_mutex_t。在使用前,要對它進行初始化。
靜態分配:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER

加鎖。對共享資源的訪問,要對互斥量進行加鎖,如果互斥量已經上了鎖,呼叫執行緒會阻塞,直到互斥量被解鎖。
int pthread_mutex_lock(pthread_mutex *mutex);
解鎖。在完成了對共享資源的訪問後,要對互斥量進行解鎖。
int pthread_mutex_unlock(pthread_mutex_t *mutex);

這裡寫圖片描述

執行結果:
這裡寫圖片描述

好了,Linux 執行緒管理就總結到這裡,如有問題,歡迎指正,謝謝。