线程(控制源语、线程属性)
线程概念
线程是强加入进来的;
gdb不支持线程调试;
- 什么是线程
LWP 线程号
- linux内核线程实现原理
查看lwp号,ps -Lf pid
-
线程共享资源
线程不要和信号一起用; -
线程非共享资源
-
线程优缺点
进程、线程,优选线程(简单);
线程控制原语
-
pthread_self()
LWP cpu分配程序执行时间
线程id是在进程地址空间内部,用来标识线程身份; -
pthread_create()
示例代码:
这程序有问题,线程还没运行,进程没了;
循环创建几个线程:
错误代码:
i是变量,且一直在变,传入地址的话,当线程执行时,i值可能就变了;
值拷贝的话,就不会有这个问题;
线程共享全局变量:
- pthread_exit()
代码示例,理解退出线程
退出主线程,对子线程没影响如下:
注意理解
- pthread_join()
线程异常退出,退出值为-1;
示例代码:
注意tval是malloc出来的,线程返回值是void *;下面是错误示范:
正确代码:
错误代码:
原因是:使用了地址74里面的值;改成如下即可:
- pthread_detach()
检查错误方式变了:
但是上面代码有问题,因为先detach了,再join的话没有意义了;
pthread_detach() 会回收资源;
- pthread_cancel()
终止线程的几种方式,代码如下:
注意的是:被杀死的线程,线程终止值是-1;
杀死线程需要取消点
这样的话,pthread_cancel()不能杀死线程;不像信号,优先级高;
注意:需要添加取消点,即pthread_testcancel();
线程中函数调用失败的话,直接返回失败原因,用strerror();
文章地址
- 控制原语对比
线程属性
- 线程属性初始化
-
线程的分离状态
-
线程属性控制示例
如果想验证是否分离成功,怎么测?如下:
2种方式分离方式:
使用线程的注意事项:
如果,感到此时的自己很辛苦,那告诉自己:容易走的都是下坡路。坚持住,因为你正在走上坡路,走过去,你就一定会有进步。如果,你正在埋怨命运不眷顾,开导自己:命,是失败者的借口;运,是成功者的谦词。命运从来都是掌握在自己的手中,埋怨,只是一种懦弱的表现;努力,才是人生的态度。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】