linux
多執行緒程式設計:【
多執行緒支援
posix
執行緒介面,稱為
pthread,
pthread_create
用來建立執行緒,
pthread_join
等待執行緒結束,函式的原型分別如下:
extern int pthread_create __p ((pthread_t *__thread, __const pthread_attr_t *__attr,
void *(*__start_routine) (void *), void *__arg));
extern int pthread_join __p ((pthread_t __th, void **__thread_return));
建立執行緒時可以給執行緒設定相關屬性,該屬性包括設定是否繫結,是否分離,堆疊位址,堆疊大小,優先順序,預設的屬性為非繫結、非分離、預設
1m 的堆疊、與父程序同樣級別的優先順序。
屬性相關的結構體是
pthread_attr_t
,初始化函式為
pthread_attr_init.
設定執行緒繫結狀態的函式為
pthread_attr_setscope
,它有兩個引數,第乙個是指向屬性結構的指標,第二個是繫結型別,它有兩個取值:
pthread_scope_system
(繫結的)和
pthread_scope_process
(非繫結的)。
執行緒的分離狀態決定乙個執行緒以什麼樣的方式來終止自己。在上面的例子中,我們採用了執行緒的預設屬性,即為非分離狀態,這種情況下,原有的執行緒等待建立的執行緒結束。只有當
pthread_join
()函式返回時,建立的執行緒才算終止,才能釋放自己占用的系統資源。而分離執行緒不是這樣子的,它沒有被其他的執行緒所等待,自己執行結束了,執行緒也就終止了,馬上釋放系統資源。程式設計師應該根據自己的需要,選擇適當的分離狀態。設定執行緒分離狀態的函式為
pthread_attr_setdetachstate
(pthread_attr_t *attr, int detachstate
)。第二個引數可選為
pthread_create_detached
(分離執行緒)和
pthread _create_joinable
(非分離執行緒)。
執行緒資料
[tsd, thread specific data]
相關的函式主要有
4 個:
建立乙個鍵;
為乙個鍵指定執行緒資料;
從乙個鍵讀取執行緒資料;
刪除鍵。
執行緒同步:
互斥鎖:
pthread_mutex_lock,pthread_mutex_unlock.
條件變數: l
條件變數通常與互斥鎖一起使用,用來打破互斥鎖所存在的缺點,通過改
變條件變數來通知等待中的執行緒。 l
結構為pthread_cond_t
,函式pthread_cond_init
()被用來初始化乙個條件
變數。 l
函式pthread_cond_wait
()使執行緒阻塞在乙個條件變數上
, 另乙個用來阻塞
執行緒的函式是
pthread_cond_timedwait
(), l
函式pthread_cond_signal
()用來釋放被阻塞在條件變數
cond
上的乙個執行緒
訊號量:
l 本質上是乙個非負的整數計數器,它被用來控制對公共資源的訪問。 l
訊號量的資料型別為結構
sem_t
,它本質上是乙個長整型的數。函式
sem_init
()用來初始化乙個訊號量。 l
函式sem_post( sem_t *sem )
用來增加訊號量的值。當有執行緒阻塞在這個訊號量上時,呼叫這個函式會使其中的乙個執行緒不在阻塞,選擇機制同樣是由執行緒的排程策略決定的。 l
函式sem_wait( sem_t *sem )
被用來阻塞當前執行緒直到訊號量
sem 的值大於
0 ,解除阻塞後將
sem 的值減一,表明公共資源經使用後減少。 l
函式sem_trywait ( sem_t *sem )
是函式sem_wait
()的非阻塞版本,它直接將訊號量
sem 的值減一。 l
函式sem_destroy(sem_t *sem)
用來釋放訊號量
sem 。
Linux 多執行緒程式設計
1.建立執行緒和退出的函式原型 int pthread create pthread t thread,pthread attr t attr,void start routine void void arg pthread exit 0 其他還有很多相關的函式。2.編譯時要加上 lpthread ...
linux 多執行緒程式設計
多執行緒的使用 典型的執行緒包括乙個執行時間系統,它可以按透明的方式來管理執行緒。通常執行緒包包括對執行緒的建立和刪除,以及對互斥和條件變數的呼叫。posix標準執行緒庫具有這些呼叫。這些包還提供執行緒的動態建立和刪除,因此,直到執行時間之前,執行緒的個數不必知道。執行緒具有乙個id 乙個堆疊 乙個...
Linux 多執行緒程式設計
這篇文章總結下 linux 中多執行緒程式設計中能用到的幾個函式,當然,需要同步操作的時候還需要加鎖的操作,這裡,沒有列舉的這麼具體,只是把最常用的函式介紹下。在編寫多執行緒程式在編譯的時候需要加上 lpthread,因為用到了 pthread 庫。標頭檔案 include 功能 建立乙個執行緒 引...