Linux:线程控制(创建、终止、等待、分离)

标题

    • 创建
    • 线程终止
        • 线程创建的默认属性:
    • 线程等待
    • 线程分离

创建

Linux:线程控制(创建、终止、等待、分离)_第1张图片
Linux:线程控制(创建、终止、等待、分离)_第2张图片
两个线程有各自的栈
Linux:线程控制(创建、终止、等待、分离)_第3张图片

线程入口参数传递:

Linux:线程控制(创建、终止、等待、分离)_第4张图片

  • tn也是临时变量,但是传参时是将其里面保存的内容传递,所以没有出现错误;
  • 最后还要把堆上开辟的空间释放,释放应该由线程释放;
  • 不能由主线程释放,因为工作线程还要使用;

线程入口函数传参注意:

  • 线程入口函数参数不能传递临时变量;
  • 传递堆上的空间,在线程不使用时由线程释放;
  • 线程入口函数参数不仅可以传递内置类型,也可以传递自定义类型;

如何在一个进程疯狂使用CPU,但里面包含多个线程,如何分析是哪个线程所导致?

  • top -H -p +进程号,使用该命令可以查看到其底下所有线程的资源信息
  • 再用pstack +进程号找到具体线程的地址

线程终止

  1. 线程入口函数的return返回,当前线程就退出
    Linux:线程控制(创建、终止、等待、分离)_第5张图片

  1. 线程调用pthread_exit函数,谁调用谁退出
    Linux:线程控制(创建、终止、等待、分离)_第6张图片Linux:线程控制(创建、终止、等待、分离)_第7张图片

  1. 线程调用pthread_cancel函数,退出thread线程;
    填谁的线程标识符,谁就退出;Linux:线程控制(创建、终止、等待、分离)_第8张图片Linux:线程控制(创建、终止、等待、分离)_第9张图片

线程创建的默认属性:

  • 用pthread_creat在创建线程时,线程的属性默认是joinable属性;
  • 该属性导致线程在退出时依赖别人回收资源;
  • 也就说说线程退出了,但是线程的资源未被回收;
  • 需要用线程等待解决

线程等待

线程等待函数
Linux:线程控制(创建、终止、等待、分离)_第10张图片Linux:线程控制(创建、终止、等待、分离)_第11张图片
pthread_join没有等到线程退出,就一直在阻塞

线程分离

线程分离属性:一个线程被设置成分离属性后,则该线程在退出后,不需要其它执行流回收该线程资源,而是由操作系统回收

在这里插入图片描述Linux:线程控制(创建、终止、等待、分离)_第12张图片

  • 该函数是设置线程属性
  • 这种是在创建时线程设置自己的分离属性,还有一种是线程自己设置成分离属性

你可能感兴趣的:(Linux系统编程,linux,多线程,操作系统)