linux创建线程的函数是什么
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要介绍"linux创建线程的函数是什么"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"linux创建线程的函数是什么"文章能帮助大家解决问题。linu
千家信息网最后更新 2025年01月23日linux创建线程的函数是什么
这篇文章主要介绍"linux创建线程的函数是什么"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"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
函数声明
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#include #include #include #include #include #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 & taskID, vector & taskArgs){ void *ret; for (int index = 0; index<2; 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 taskID(3); vector 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 注意编译的使用需要加上编译选项-lpthread,比如:g++ -lpthread main.cpp -o main
关于"linux创建线程的函数是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。
线程
函数
参数
属性
运行
地址
系统
任务
指向
知识
编译
操作系统
指针
标识
标识符
行业
资源
中创
不同
实用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术维护与支撑
云服务器的流量怎么计算
南京通信网络技术管理系统
崂山区电商软件开发推荐
网络安全的微信公众号
三级网络技术题库有问题
杭州今元网络技术
linux服务器慢
怎样运用网络技术传播平台
数据库网络安全技术与应用
2022 服务器cpu
检查是否安装svn服务器
怎么求证逻辑蕴含数据库
人人参与画好网络安全同心圆
温州计算机应用软件开发
宝山区专业软件开发代理品牌
我的世界gommehd服务器
网络安全活动的重要性
银行网络安全培训总结报告
支持架设远程管理服务器
使用网络技术犯罪真实案例
网络安全提供四种安全服务
深圳服务器电源厂家有哪些
软件开发计划sdp
国产汽车数据库
检查人员名录数据库
沈阳软件开发培训
数据库中除运算的用法
低压u软件开发
关系型数据库hdfs同步工具