一.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.關於死鎖的解決方法
void
pthread_cleanup_push(
void
(*routine)(
void
*), void
*arg);
void
pthread_cleanup_pop(
int
execute);
在乙個執行緒結束的時候,會自動執行乙個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.關於int
pthread_cancel(pthread_t
thread
);
向執行緒thread傳送終止訊號,成功為0,否則非0。傳送成功並不意味這執行緒會終止。
執行緒接收到cancel訊號的預設處理(即pthread_create()建立執行緒的預設狀態)是繼續執行至取消點,也就是說設定乙個canceled狀態,執行緒繼續執行,只有執行至cancelation-point的時候才會退出。
5. int
pthread_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...