线程(控制源语、线程属性)

线程概念

线程是强加入进来的;
gdb不支持线程调试;

  1. 什么是线程

学习地址

image

image

image

image
LWP 线程号

  1. linux内核线程实现原理

学习地址

image
查看lwp号,ps -Lf pid
image

image

  1. 线程共享资源
    image
    线程不要和信号一起用;

  2. 线程非共享资源
    image

  3. 线程优缺点

image
进程、线程,优选线程(简单);


线程控制原语

  1. pthread_self()
    LWP cpu分配程序执行时间
    image
    线程id是在进程地址空间内部,用来标识线程身份;

  2. pthread_create()

image
image

示例代码:
image
这程序有问题,线程还没运行,进程没了;

循环创建几个线程:
image
错误代码:
image
i是变量,且一直在变,传入地址的话,当线程执行时,i值可能就变了;
值拷贝的话,就不会有这个问题;

线程共享全局变量:
image

  1. pthread_exit()

image

代码示例,理解退出线程
image
image

退出主线程,对子线程没影响如下:
image

注意理解
image

  1. pthread_join()

image
线程异常退出,退出值为-1;
示例代码:
image
注意tval是malloc出来的,线程返回值是void *;下面是错误示范:
image

正确代码:
image

错误代码:
image
原因是:使用了地址74里面的值;改成如下即可:
image

  1. pthread_detach()

image

检查错误方式变了:
image
image
但是上面代码有问题,因为先detach了,再join的话没有意义了;
pthread_detach() 会回收资源;

  1. pthread_cancel()

学习地址

终止线程的几种方式,代码如下:
image
image
注意的是:被杀死的线程,线程终止值是-1;

杀死线程需要取消点
image
这样的话,pthread_cancel()不能杀死线程;不像信号,优先级高;
注意:需要添加取消点,即pthread_testcancel();

线程中函数调用失败的话,直接返回失败原因,用strerror();
文章地址

  1. 控制原语对比
    image

线程属性

  • 线程属性初始化

image

  • 线程的分离状态
    image
    image

  • 线程属性控制示例
    image
    如果想验证是否分离成功,怎么测?如下:
    image
    2种方式分离方式:
    image


使用线程的注意事项:
image


posted @   我爱茜茜公主  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示