Linux多執行緒程式設計

2021-05-09 04:49:07 字數 2397 閱讀 3873

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 功能 建立乙個執行緒 引...