Linux学习之系统编程篇:创建线程函数
生活随笔
收集整理的這篇文章主要介紹了
Linux学习之系统编程篇:创建线程函数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
所有線程函數(shù)相同點:
(1)函數(shù)調(diào)用成功返回 0,失敗返回錯誤號(但注意:不能用 perror 打印)。
(2) 頭文件:#include <pthread.h> 編譯時候需要使用線程庫,因此需要加 -pthread。
一、創(chuàng)建線程
int pthread_create( pthread_t *thread, //線程 ID = 無符號長整形 %lu //傳出參數(shù),以返回值告知創(chuàng)建的線程 ID const pthread_attr_t *attr, // 線程屬性:不設(shè)置線程分離 -- NULL void *(*start_routine) (void *), // 線程都有明確的任務(wù) // 回調(diào)函數(shù)形式 void* func(void* arg) void *arg // 線程處理函數(shù)的參數(shù) // 給回調(diào)函數(shù)傳參 );返回值:
成功 :返回 0
失敗 :返回 錯誤號
二、獲得當前線程 ID
pthread_t pthread_self(void); //永遠成功返回值類型:pthread_t 。
三、練習(xí)創(chuàng)建線程
創(chuàng)建 5 個子線程,各線程專門打印自己線程 ID,并判斷是第幾個子線程。
void* myfunc(void* arg) { int num = (int)argprintf( "%dth child thread id = %lu\n", num , pthread_self() ); // 打印子線程IDreturn NULL; // 比較正規(guī)的是使用 pthread_exit } int main() {pthread_t pthid[5]; //線程ID,傳出參數(shù),因此先定義好for(int i = 0; i < 5; i++){ // pthread_create(&pthid[i], NULL, myfunc, (void*)&i);// 如果傳參是 i 的地址,回調(diào)函數(shù)中讀取的是該地址中的數(shù)值,同一地址存放的數(shù)值會隨著循環(huán)被覆蓋而變化 // 循環(huán)太快的話,沒等子線程打印出來 i 值,該地址中存放的 i 值就變了,導(dǎo)致無法正確輸出是第幾個線程// 改進:值傳遞(直接回調(diào)函數(shù)中讀數(shù)值,與地址無關(guān),值改變就沒有影響了)int ret = pthread_create(&pthid[i], NULL, myfunc, (void*)i);// 如何打印錯誤信息(不能用perror,而是用strerror) if(ret != 0) { // 創(chuàng)建失敗,成功 返回 0 printf(“error num : %d\n”, ret); // 打印錯誤號 printf(“%s\n”, strerror(ret) ); // strerror(ret) 需要頭文 #include<string.h> } 參數(shù):錯誤號,返回值類型:char*}return 0; }總結(jié)
以上是生活随笔為你收集整理的Linux学习之系统编程篇:创建线程函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux学习之系统编程篇:对线程的基本
- 下一篇: Linux学习之系统编程篇:单个线程的退