久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

linux創建線程的函數是什么

165次閱讀
沒有評論

共計 2728 個字符,預計需要花費 7 分鐘才能閱讀完成。

這篇文章主要介紹“linux 創建線程的函數是什么”的相關知識,丸趣 TV 小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“linux 創建線程的函數是什么”文章能幫助大家解決問題。

linux 有創建線程的函數,即“pthread_create()”函數。該函數是類 Unix 操作系統中創建線程的函數,支持四個參數:參數 1 是指向線程標識符的指針、參數 2 用來設置線程屬性、參數 3 是線程運行函數的起始地址、參數 4 是運行函數的參數。

本教程操作環境:linux5.9.8 系統、Dell G3 電腦。

linux 創建線程的函數是 pthread_create() 函數

pthread_create() 是類 Unix 操作系統(Unix、Linux、Mac OS X 等)中創建線程的函數

頭文件

#include pthread.h

函數聲明

int pthread_create(
 pthread_t *restrict tidp, // 新創建的線程 ID 指向的內存單元。 const pthread_attr_t *restrict attr, // 線程屬性,默認為 NULL
 void *(*start_rtn)(void *), // 新創建的線程從 start_rtn 函數的地址開始運行
 void *restrict arg // 默認為 NULL。上述函數需要參數,將參數放入結構中并將地址作為 arg 傳入。 );

返回值

若成功則返回 0,否則返回出錯編號

參數

第一個參數為指向線程標識符的指針。

第二個參數用來設置線程屬性。

第三個參數是線程運行函數的地址。

最后一個參數是運行函數的參數。

注意

在編譯時注意加上 -lpthread 參數,以調用靜態鏈接庫。因為 pthread 并非 Linux 系統的默認庫。

函數用法

#include  stdio.h 
#include  string.h 
#include  iostream 
#include  pthread.h 
#include  unistd.h 
#include  vector 
#include  main.h 
using namespace std;
struct Sample {
 uint32_t index;
 char sex;
 uint32_t age;
 uint32_t result;
void* TaskEntry(void *args)
 Sample *sa = (Sample*)args;
 uint32_t num = sa- index;
 if (num == 0) {
 printf( TaskEntry entry num = 0\n  //  線程 1 執行體
 sleep(10);
 printf( TaskEntry entry num = 0 is over!!!\n 
 } else if (num == 1) {
 printf( TaskEntry entry num = 1\n  //  線程 2 執行體
 sleep(10);
 printf( TaskEntry entry num = 1 is over!!!\n 
 } else if (num == 2) {
 printf( TaskEntry entry num = 2\n  //  線程 3 執行體
 sleep(2);
 printf( TaskEntry entry num = 2 is over!!!\n 
 }
uint32_t CreateTask(pthread_t  pid, Sample  sample)
 //  假設 Sample.index == 2 創建任務失敗,直接返回
 if (sample.index == 2) {
 return 2;
 }
 pthread_attr_t attr; //  設置線程屬性
 pthread_attr_init(attr);
 pthread_attr_setstacksize(attr, 64 * 1024); //  設置線程棧大小為 64KB
 uint32_t ret = pthread_create(pid,  attr, (void*(*)(void*))TaskEntry, (void*) sample);
 if (ret != 0) {
 return ret;
 }
 pthread_attr_destroy(attr); //  取消線程的設置屬性
 return 0;
void VerifyTask(vector pthread_t  taskID, vector Sample  taskArgs)
 void *ret;
 for (int index = 0; index  index++) {
 //  等待線程結束,釋放相應的資源。pthread_join 會堵塞主線程不會堵塞其他子線程,然后等待監控的線程執行完成,再返回主線程
 //  在此處線程執行順序為:線程 1 -- 主線程 -- 線程 2 -- 主線程 -- 線程 3
 pthread_join(taskID[index],  ret); //  堵塞主線程,執行子線程 taskID[index],等待子線程 taskID[index] 執行完成釋放資源
 printf(task[%d] is over\n , index); //  主線程執行打印操作
 }
int main(void)
 //  創建 3 個線程
 vector pthread_t  taskID(3);
 vector Sample  taskArgs(3);
 for (int i = 0; i   3; i++) { taskArgs[i] = { i,  a , 90, 0};
 uint32_t ret = CreateTask(taskID[i], taskArgs[i]);
 if (ret != 0) {
 //  模擬如下場景:任務創建失敗,直接停止前面的任務
 for (int j = 0; j  j++) { pthread_cancel(taskID[j]); //  子線程 1 和子線程 2 延遲 10s,當線程 3 創建失敗時,直接讓其停止。 }
 //return ret; //  主線程退出,所有子線程一起退出
 }
 }
 VerifyTask(taskID, taskArgs); //  校驗線程是否結束
 printf( three thead is running over!!!\n 
 return 0;
}

注意編譯的使用需要加上編譯選項 -lpthread,比如:g++ -lpthread main.cpp -o main

關于“linux 創建線程的函數是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注丸趣 TV 行業資訊頻道,丸趣 TV 小編每天都會為大家更新不同的知識點。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-03發表,共計2728字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 银川市| 台南市| 永和县| 会宁县| 疏勒县| 雷州市| 江津市| 常德市| 缙云县| 凤台县| 台东市| 葫芦岛市| 叶城县| 敦化市| 宝丰县| 佛山市| 济源市| 亚东县| 湖口县| 洛南县| 崇信县| 昆山市| 安吉县| 康乐县| 延庆县| 平凉市| 武清区| 增城市| 大石桥市| 莒南县| 都江堰市| 东丽区| 皮山县| 贵定县| 靖西县| 扶余县| 资源县| 天水市| 永胜县| 汤阴县| 阿拉善左旗|