linux创建线程的函数是什么
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章主要介绍"linux创建线程的函数是什么"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"linux创建线程的函数是什么"文章能帮助大家解决问题。linu
千家信息网最后更新 2025年02月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安全错误
数据库的锁怎样保障安全
dhcp服务器能管理
蓝芽网络技术 湖北 有限公司
服务器管理员被踢
网络安全主题策划案
服务器系统装win10稳定吗
西安数据恢复软件开发
域文件服务器安全策略
网络安全的主要目标是什么
服务器安全使用
机房网络安全标语
乌镇互联网大会发布了哪些科技
java需要软件开发
临夏县网络安全活动
女性哪些服务器
网络安全板块景气度持续上行
手机和网络安全专项排查自查自纠
网络暴力算网络安全吗
工行软件开发中心面试地点
洛龙区软件开发公司
苹果手机服务器地址从哪里找
微梦网络技术
微信小程序数据库连接
服务器 出口带宽
数据库的优势
网页怎么保存文件到服务器
联想服务器第次一启动
淘宝是什么软件开发的
网络安全设备配置设置密码的代码
淄博市网络安全教育培训班
网络安全+网络摄像头