多執行緒的使用
典型的執行緒包括乙個執行時間系統,它可以按透明的方式來管理執行緒。通常執行緒包包括對執行緒的建立和刪除,以及對互斥和條件變數的呼叫。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 功能 建立乙個執行緒 引...