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 執行緒管理就總結到這裡,如有問題,歡迎指正,謝謝。