linux 多執行緒程式設計

2021-04-16 11:10:00 字數 2242 閱讀 4378

多執行緒的使用

典型的執行緒包括乙個執行時間系統,它可以按透明的方式來管理執行緒。通常執行緒包包括對執行緒的建立和刪除,以及對互斥和條件變數的呼叫。posix標準執行緒庫具有這些呼叫。這些包還提供執行緒的動態建立和刪除,因此,直到執行時間之前,執行緒的個數不必知道。

執行緒具有乙個id、乙個堆疊、乙個執行優先權,以及執行的開始位址。posix執行緒通過pthread_t型別的id來引用。pthread_t其實就是無符號長整型,在檔案/usr/include/bits/pthreadtypes.h有如下定義:

typedef unsigned long int pthread_t;

執行緒的內部資料結構也包含排程和使用資訊。程序的執行緒共享程序的完整位址空間,它們能夠修改全域性變數,訪問開啟的檔案描述符,或用別的方式相互作用。

1、  pthread_create函式

如果執行緒可在程序的執行期間的任意時刻被建立,並且執行緒的數量事先沒有必要指定,這樣的執行緒稱為動態執行緒。在posix中,執行緒是用pthread_create動態的建立的。pthread_create能建立執行緒,並將它放入就緒佇列。建立執行緒需要呼叫pthread_create,該函式的定義如下所示:

#include

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void*(*start_routine)(void *),void *arg);

該函式的第1個引數thread將指向建立執行緒的id。執行緒的屬性是由attr指向的屬性物件來包容的。如果attr為null,新執行緒具有預設的屬性。第3個引數start_routine是執行緒開始執行時呼叫的函式名字。start_routine占用乙個引數arg,它是乙個指向viod的指標。start_routine返回乙個指向viod的指標,此指標被空作時pthread_jion的退出狀態。

函式pthread_create在成功呼叫時返回0,失敗時返回-1。

2、  pthread_self函式

在建立執行緒之後,可以呼叫pthread_self得到執行緒的id,該函式的定義如下所示:

#include

pthread_t pthread_self(void);

3、  pthread_exit函式

與程序退出時呼叫exit類似,執行緒退出時也需要呼叫pthread_exit,它的定義如下:

#include

void pthread_exit(void* retval);

函式pthread_exit在成功呼叫時返回0,失敗時返回-1。

4、  pthread_join函式

在成功建立執行緒之後,可以呼叫pthread_join將建立的執行緒加入到原程序中去,pthread_join的定義如下所示:

#include

int pthread_join(pthread_t th,void **thread_return);

如果呼叫了pthread_join,那麼程序會等待執行緒呼叫pthread_exit之後才退出,這個函式的作用類似於wait系統呼叫。pthread_join的第1個引數th為所建立執行緒的id,第2個引數指向執行緒的退出碼。

函式pthread_join在成功呼叫時返回0,失敗時返回-1。

5、例子

#include

#include

using namespace std;

void *thread(void *arg)

int main()

printf("man thread/n");

sleep(1);

return 0;

}這個例子的編譯執行如下:

而對於用arm-linux-gcc編譯的時候後面需要加上-lpthread

參考:毛曙福       《linux c高階程式設計師指南》國防工業出版社

多執行緒互斥方法

在使用互斥變數之前需要定義互斥變數:

pthread_mutex_t        mutex;

然後對變數進行初始化,也即向核心申請互斥變數

pthread_mutex_init(&mutex, null);

進入臨界區之前需要對變數進行加鎖:

pthread_mutex_lock(&mutex);

……………………

最後退出臨界區的時候需要進行解鎖

pthread_mutex_unlock(&mutex);

Linux 多執行緒程式設計

1.建立執行緒和退出的函式原型 int pthread create pthread t thread,pthread attr t attr,void start routine void void arg pthread exit 0 其他還有很多相關的函式。2.編譯時要加上 lpthread ...

Linux多執行緒程式設計

linux 多執行緒程式設計 多執行緒支援 posix 執行緒介面,稱為 pthread,pthread create 用來建立執行緒,pthread join 等待執行緒結束,函式的原型分別如下 extern int pthread create p pthread t thread,const ...

Linux 多執行緒程式設計

這篇文章總結下 linux 中多執行緒程式設計中能用到的幾個函式,當然,需要同步操作的時候還需要加鎖的操作,這裡,沒有列舉的這麼具體,只是把最常用的函式介紹下。在編寫多執行緒程式在編譯的時候需要加上 lpthread,因為用到了 pthread 庫。標頭檔案 include 功能 建立乙個執行緒 引...