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、 初始化互斥鎖
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLi0zaHRGcWdUYuVzVa9GczoVdG1mWfVGc5RHLwIzX39GZhh2csATMflHLwEzX4xSZz91ZsAzMfRHLGZkRGZkRfJ3bs92YskmNhVTYykVNQJVMRhXVEF1X0hXZ0xiNx8VZ6l2cssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL5EzM1AjN0EzM4MmM1MmZyYzXyMDMzATM3EzLchDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
Pthread_mutex_init
作用:用來初始化互斥鎖
mutex:初始化互斥鎖的指針。
Attr:初始化互斥鎖屬性
傳回值:成功:0.失敗:傳回:錯誤的編碼。
2、 擷取互斥鎖
Pthread_mutex_lock
作用:用于鎖住互斥鎖
Mutex:用于指明要鎖住的互斥鎖。
傳回值:成功:0.失敗:傳回:錯誤的編碼。
3.釋放互斥鎖
Pthread_mutex_unlock
作用:用于解除互斥鎖
Mutex:用于指明要解除的互斥鎖
傳回值:成功:0.失敗:傳回:錯誤的編碼。
注意:祖先程序結束,那麼子孫線程會結束。而祖先程序結束,子孫程序不會結束。
執行個體:讓A程序建立兩個線程A1和A2來做任務
thread.c