pthread庫使用總結

2021-06-16 07:39:02 字數 2779 閱讀 8720

一.pthread執行緒庫

符合posix標準,portbale opeating system inte***ce of unix。

pthread庫分別支援linux、windows版本。

二.庫函式

執行緒操作函式:

1.pthread_create():建立乙個執行緒;

2.pthread_exit():終止當前執行緒;

每乙個執行緒的返回值是void *,有兩種方法返回:

1)return pointer;

2)pthread_exit((void*)pointer);

其它的執行緒通過int pthread_join(pthread_t ptid, void **thread_return)函式獲取執行緒ptid的返回值。

4.pthread_exit((void*)pointer)與int pthread_join(pthread_t ptid, void **thread_return)的配合使用

呼叫pthread_join的執行緒會被阻塞,直至執行緒ptid結束,如果thread_return!=null,執行緒ptid的返回碼pointer返回至*thread_return中。

5.int pthread_detach (pthread_t ptid);

將執行緒ptid的狀態設定為分離狀態(detached),該執行緒在執行結束後會自動釋放該執行緒所占有的資源。

將子執行緒設定為分離狀態,有兩種方式:

1)父執行緒呼叫pthread_detach ( ptid),將子執行緒ptid設為detached狀態;

2)子執行緒將自己設定為detached狀態:pthread_detach(pthread_self()) 。

同步函式:

1.互斥鎖mutex,互斥變數

初始化互斥變數:pthread_mutex_init(&mutex, null);

加鎖:pthread_mutex_lock(&mutex);

解鎖:pthread_mutex_unlock(&mutex);

銷毀互斥變數:pthread_mutex_destroy(&mutex);

互斥鎖在同一時刻只能被程序中的乙個執行緒所使用。如果呼叫pthread_mutex_lock(&mutex)的執行緒發現mutex已經被上鎖了,該執行緒會被阻塞,直至鎖mutex被釋放。

2.條件變數

pthread_cond_init():初始化條件變數 

pthread_cond_destroy():銷毀條件變數

pthread_cond_wait(): 等待條件變數的特殊條件發生;

注:pthread_cond_wait()通常與互斥鎖配合使用,pthread_cond_wait()會阻塞呼叫該函式的執行緒,執行緒阻塞前回自動解除互斥變數,直至被喚醒後,重新獲得鎖並繼續執行。

pthread_cond_signal(): 喚醒第乙個呼叫pthread_cond_wait()而進入睡眠的執行緒 。

3.關於死鎖的解決方法

voidpthread_cleanup_push(void(*routine)(void*), void*arg);

voidpthread_cleanup_pop(intexecute);

在乙個執行緒結束的時候,會自動執行乙個clean-up函式柄,這個函式柄裡有乙個stack(棧),之前就通過pthread_cleanup_push往這個棧裡壓入了乙個函式,我們壓入很多個,然後退出的時候,clean-up函式柄會自動的從這些棧裡拿出函式進行執行。

如果此函式沒有異常退出,那這些棧的函式怎麼辦呢?我們可以通過phread_cleanup_pop彈出這些棧裡的函式,注意,此時的引數要為0,如果非0的話,彈出的同時也會執行這些函式的。

pthread_cleanup_push(pthread_mutex_unlock, (void*) &mutex);

pthread_mutex_lock(&mutex);

/* do some work */

pthread_mutex_unlock(&mutex);

pthread_cleanup_pop(0);

4.關於intpthread_cancel(pthread_tthread);

向執行緒thread傳送終止訊號,成功為0,否則非0。傳送成功並不意味這執行緒會終止。

執行緒接收到cancel訊號的預設處理(即pthread_create()建立執行緒的預設狀態)是繼續執行至取消點,也就是說設定乙個canceled狀態,執行緒繼續執行,只有執行至cancelation-point的時候才會退出。 

5. intpthread_kill()

該函式可以測試執行緒是否存在。

pthread 執行緒庫

ubuntu 下沒有pthread庫 man不到相關函式 只需兩條命令搞定!sudo apt get install glibc doc sudo apt get install manpages posix dev 然後在用man k pthread create就可以找到了 pthread執行緒...

pthread互斥訊號量使用總結

一年前寫的東西,重新抄錄以防遺忘。glibc提供的pthread互斥訊號量可以用在程序內部,也可以用在程序間,可以在初始化時通過pthread mutexattr setpshared介面設定該訊號 量屬性,表示是程序內還是程序間。程序內的使用較為簡單,本文的總結主要是針對程序間的,程序內的也可以參...

Pthread並行程式設計總結

2.執行緒資料共享 3.pthread hello world 4.pthread 其他基礎 api 5.綜合例 多個陣列排序 int pthread create pthread t const pthread attr t void void void 呼叫例 errcode pthread c...