线程(控制源语、线程属性)
线程概念
线程是强加入进来的;
gdb不支持线程调试;
- 什么是线程




LWP 线程号
- linux内核线程实现原理

查看lwp号,ps -Lf pid


-
线程共享资源
![image]()
线程不要和信号一起用; -
线程非共享资源
![image]()
-
线程优缺点

进程、线程,优选线程(简单);
线程控制原语
-
pthread_self()
LWP cpu分配程序执行时间
![image]()
线程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();
文章地址
- 控制原语对比
![image]()
线程属性
- 线程属性初始化

-
线程的分离状态
![image]()
![image]()
-
线程属性控制示例
![image]()
如果想验证是否分离成功,怎么测?如下:
![image]()
2种方式分离方式:
![image]()
使用线程的注意事项:

如果,感到此时的自己很辛苦,那告诉自己:容易走的都是下坡路。坚持住,因为你正在走上坡路,走过去,你就一定会有进步。如果,你正在埋怨命运不眷顾,开导自己:命,是失败者的借口;运,是成功者的谦词。命运从来都是掌握在自己的手中,埋怨,只是一种懦弱的表现;努力,才是人生的态度。










浙公网安备 33010602011771号