多线程程序设计
1、基本概念
a、线程就是“轻量级”的进程
b、线程与创建它的进程共享代码段和数据段
c、线程拥有自己的独立的栈。
2、函数学习
1)创建线程
函数名:pthread_create
函数原型:Int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine)(void *),void *arg);
函数功能:在调用进程当中去创建新的线程
所属头文件:<pthread.h>特别注意:编译时必须使用gcc –lpthread
返回值:成功:返回0.失败:返回错误编码
参数说明:Thread:新创建的线程的id。
Attr:待创建线程的属性,一般为空
Start_routine:指定线程要执行的函数(线程的入口函数)。
Arg:线程入口函数的参数,可以为空。
2)等待线程结束
函数名:Pthread_join
函数原型:Int pthread_join(pthread_t thread,void **retval);
函数功能:用于等待线程结束
所属头文件:<pthread.h>特别注意:同样编译时必须使用gcc –lpthread
返回值:成功:返回0.失败:返回错误编码
参数说明:Thread:要等待结束的线程的id。
Retval:用于保存线程退出时的状态,一般采用空,不保存。
3)退出线程(不能使用exit退出线程,如果使用的话,会使创建线程的进程也退出)
函数名:Pthread_exit
函数原型:Void pthread_exit(void *retval);
函数功能:结束线程
所属头文件:<pthread.h>特别注意:同样编译时必须使用gcc –lpthread
返回值:返回为空
参数说明:Retval:用于保存返回值
4)线程互斥
在实际应用中,多个线程往往会访问同一数据或资源,为避免线程之间相互影响,需引入线程互斥机制,而互斥锁是互斥机制中的一种。
1、 初始化互斥锁
Pthread_mutex_init
作用:用来初始化互斥锁
mutex:初始化互斥锁的指针。
Attr:初始化互斥锁属性
返回值:成功:0.失败:返回:错误的编码。
2、 获取互斥锁
Pthread_mutex_lock
作用:用于锁住互斥锁
Mutex:用于指明要锁住的互斥锁。
返回值:成功:0.失败:返回:错误的编码。
3.释放互斥锁
Pthread_mutex_unlock
作用:用于解除互斥锁
Mutex:用于指明要解除的互斥锁
返回值:成功:0.失败:返回:错误的编码。
注意:祖先进程结束,那么子孙线程会结束。而祖先进程结束,子孙进程不会结束。
实例:让A进程创建两个线程A1和A2来做任务
thread.c
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】