天天看點

多線程程式設計

1、基本概念

a、線程就是“輕量級”的程序

b、線程與建立它的程序共享代碼段和資料段

c、線程擁有自己的獨立的棧。

2、函數學習

1)建立線程

函數名:pthread_create

函數原型:Int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine)(void *),void *arg);

函數功能:在調用程序當中去建立新的線程

所屬頭檔案:<pthread.h>特别注意:編譯時必須使用gcc –lpthread

傳回值:成功:傳回0.失敗:傳回錯誤編碼

參數說明:Thread:新建立的線程的id。

Attr:待建立線程的屬性,一般為空

Start_routine:指定線程要執行的函數(線程的入口函數)。

Arg:線程入口函數的參數,可以為空。

2)等待線程結束

函數名:Pthread_join

函數原型:Int pthread_join(pthread_t thread,void **retval);

函數功能:用于等待線程結束

所屬頭檔案:<pthread.h>特别注意:同樣編譯時必須使用gcc –lpthread

傳回值:成功:傳回0.失敗:傳回錯誤編碼

參數說明:Thread:要等待結束的線程的id。

Retval:用于儲存線程退出時的狀态,一般采用空,不儲存。

3)退出線程(不能使用exit退出線程,如果使用的話,會使建立線程的程序也退出)

函數名:Pthread_exit

函數原型:Void pthread_exit(void *retval);

函數功能:結束線程

所屬頭檔案:<pthread.h>特别注意:同樣編譯時必須使用gcc –lpthread

傳回值:傳回為空 

參數說明:Retval:用于儲存傳回值

4)線程互斥

在實際應用中,多個線程往往會通路同一資料或資源,為避免線程之間互相影響,需引入線程互斥機制,而互斥鎖是互斥機制中的一種。

1、 初始化互斥鎖

多線程程式設計

Pthread_mutex_init

作用:用來初始化互斥鎖

mutex:初始化互斥鎖的指針。

Attr:初始化互斥鎖屬性

傳回值:成功:0.失敗:傳回:錯誤的編碼。

2、 擷取互斥鎖

多線程程式設計

Pthread_mutex_lock

作用:用于鎖住互斥鎖

Mutex:用于指明要鎖住的互斥鎖。

傳回值:成功:0.失敗:傳回:錯誤的編碼。

3.釋放互斥鎖

多線程程式設計

Pthread_mutex_unlock

作用:用于解除互斥鎖

Mutex:用于指明要解除的互斥鎖

傳回值:成功:0.失敗:傳回:錯誤的編碼。

注意:祖先程序結束,那麼子孫線程會結束。而祖先程序結束,子孫程序不會結束。

執行個體:讓A程序建立兩個線程A1和A2來做任務

thread.c