当前位置: 首页 > news >正文

pthread_join函数

pthread_join等待指定线程结束,并且回收资源。阻塞当前线程,等待其他线程执行pthread_exit或者线程结束。进程必须等待线程结束,否则执行结果可能不正确。
#include <stdio.h>
#include <pthread.h>
#include <sys/types.h>
#include <unistd.h>void *thread_fun( void *argv){printf("thread_fun:%s\n",(char*)argv);for( int m =0; m <1000; m++)printf("thread_fun:parent pid %d, pid:%d, thread id:%ld----%d\n",getppid( ),getpid( ),pthread_self( ),m);return (void *)0;
}int main(  int argc, char *argv[] ){printf("main begin\n");printf("main:parent pid %d, pid:%d, thread id:%ld\n",getppid( ),getpid( ),pthread_self( ));pthread_t  tid;char *str = "hello world!"; pthread_create( &tid, NULL, thread_fun,(void *)str);printf("main end\n");return 0;
}

pthread_create( &tid, NULL, thread_fun,(void *)str);执行该语句后线程启动,线程中执行:
printf(“thread_fun:parent pid %d, pid:%d, thread id:%ld----%d\n”,getppid( ),getpid( ),pthread_self( ),m);
执行1000次。
但是程序运行过程中不会输出1000行,因为进程提前结束了。
执行结果:
在这里插入图片描述

程序正确执行,必须保证线程thread_fun执行结束后,进程才能结束。

可以在进程中加入sleep。

#include <stdio.h>
#include <pthread.h>
#include <sys/types.h>
#include <unistd.h>void *thread_fun( void *argv){printf("thread_fun:%s\n",(char*)argv);for( int m =0; m <1000; m++)printf("thread_fun:parent pid %d, pid:%d, thread id:%ld----%d\n",getppid( ),getpid( ),pthread_self( ),m);return (void *)0;
}int main(  int argc, char *argv[] ){printf("main begin\n");printf("main:parent pid %d, pid:%d, thread id:%ld\n",getppid( ),getpid( ),pthread_self( ));pthread_t  tid;char *str = "hello world!"; pthread_create( &tid, NULL, thread_fun,(void *)str);//加入sleep,保证线程先执行结束。sleep(1);printf("main end\n");return 0;
}

在这里插入图片描述

使用sleep效率低,睡眠时间短可能线程还没有结束,睡眠时间长可能线程提前结束了。

使用pthread_join是不错选择。

#include <stdio.h>
#include <pthread.h>
#include <sys/types.h>
#include <unistd.h>void *thread_fun( void *argv){printf("thread_fun:%s\n",(char*)argv);for( int m =0; m <1000; m++)printf("thread_fun:parent pid %d, pid:%d, thread id:%ld----%d\n",getppid( ),getpid( ),pthread_self( ),m);return (void *)2;
}int main(  int argc, char *argv[] ){printf("main begin\n");printf("main:parent pid %d, pid:%d, thread id:%ld\n",getppid( ),getpid( ),pthread_self( ));pthread_t  tid;char *str = "hello world!"; pthread_create( &tid, NULL, thread_fun,(void *)str);//加入sleep,保证线程先执行结束。//sleep(1);void*  thread_ret;   int result = pthread_join(tid,  &thread_ret);printf("result:%d, thread_ret:%ld\n", result, (long)thread_ret);printf("main end\n");return 0;
}

在这里插入图片描述


文章转载自:

http://4QvCq94M.ngzkt.cn
http://j0QLSNJD.ngzkt.cn
http://bXlJaznm.ngzkt.cn
http://cba1d8Dc.ngzkt.cn
http://HPBOFVt4.ngzkt.cn
http://t73E4VIp.ngzkt.cn
http://4v9d8cOg.ngzkt.cn
http://jHAr7Ey7.ngzkt.cn
http://KyM6mr3o.ngzkt.cn
http://2JnhPGpd.ngzkt.cn
http://sppdTM2y.ngzkt.cn
http://71YfUJ1J.ngzkt.cn
http://Op3EmW8r.ngzkt.cn
http://y1syAoFh.ngzkt.cn
http://ilUt99QY.ngzkt.cn
http://UsDrL0mi.ngzkt.cn
http://BUbZ7YCz.ngzkt.cn
http://UPu1pqZr.ngzkt.cn
http://bGKIhQx6.ngzkt.cn
http://GNHkDj7U.ngzkt.cn
http://wBqys7LD.ngzkt.cn
http://Jsszr861.ngzkt.cn
http://cUExxyVJ.ngzkt.cn
http://07B3e7Fy.ngzkt.cn
http://cs8QeEpU.ngzkt.cn
http://F072kb7f.ngzkt.cn
http://zRwpie2v.ngzkt.cn
http://WDx3ZVPB.ngzkt.cn
http://KGxj4xDl.ngzkt.cn
http://SVmFpgQe.ngzkt.cn
http://www.dtcms.com/a/369108.html

相关文章:

  • 视觉项目,怎么选主机
  • AI生成内容的版权问题解析与实操指南
  • Oracle软件在主机平台的应用(课程下载)
  • TVS防护静电二极管选型需要注意哪些参数?-ASIM阿赛姆
  • 数据传输优化-异步不阻塞处理增强首屏体验
  • 通信安全员【单选题】考试题库及答案
  • 【开题答辩全过程】以 基于springboot的职业学校教务管理系统设计与实现为例,包含答辩的问题和答案
  • ImmutableMap
  • Oracle 10g → Oracle 19c 升级后问题解决方案(Pro*C 项目)
  • 使用MS-SWIF框架对大模型进行SFT微调
  • 使用PyTorch构建卷积神经网络(CNN)实现CIFAR-10图像分类
  • 非靶向模型中毒攻击和靶向模型中毒攻击
  • 步步高S9:AI重塑学习体验,定义智能教育新范式
  • 与优秀者同行,“复制经验”是成功的最快捷径
  • 2025 IT行业含金量超高的8大证书推荐
  • 《Keil 开发避坑指南:STM32 头文件加载异常与 RTE 配置问题全解决》
  • 基于STM32设计的激光充电控制系统(华为云IOT)_277
  • Kubernetes(四):Service
  • Android studio 既想拍照又想拿到Bitmap
  • 自由泳动作分解与技巧详解
  • 音响皇帝BO,牵手全球第一AR眼镜雷鸟,耳机党坐不住了?
  • Redis 高级数据结构:Bitmap、HyperLogLog、GEO 深度解析
  • 深度学习——迁移学习
  • 【uniapp】打包为h5在保留头部标题的同时配置网站标题不跟随页面路由更新
  • uni-app iOS 日志与崩溃分析全流程 多工具协作的实战指南
  • bat脚本- 将jar 包批量安装到 Maven 本地仓库
  • 力扣hot100:旋转图像(48)(详细图解以及核心思路剖析)
  • U盘文件系统转换指南:方法、原因与注意事项
  • AI智能优化SEO关键词策略实战
  • 共享线程池对@Scheduled定时任务的影响