【Linux学习笔记43】线程的创建以及属性设置

引言

在Linux内核中其实并没有线程与进程的概念,只有任务概念。那么进程与线程的关系在:【Linux学习笔记32】进程与线程的基本理解也有记录过。所以这一篇笔记主要介绍线程的创建以及属性设置。

为什么要在进程中创建多条线程?
  • 每一条线程都有自己独立的执行状态
  • 线程共享进程中的所有资源

创建线程

int pthread_creat(pthread_t *thread, 
	const pthread_attr_t *attr, 
	void *(*start_routine)(void *),void *arg);

在这里插入图片描述
在这里插入图片描述

  • main主线程在运行到pthread_creat函数创建子线程
  • 子线程独立运行自己的状态
  • 主线程与子线程平等,共享资源一样
  • 如果主线程先退出,子线程依然不受影响

线程的属性设置

与线程属性有关的API:
在这里插入图片描述
在这里插入图片描述
由于线程的属性太多,不会在pthread_creat中直接设置属性,所以一般按照这样的步骤使用:

  1. 定义线程属性变量,并且使用pthread_attr_init()初始化
  2. 使用pthread_attr_setXXX()来设置相关的属性
  3. 使用该线程属性变量创建相应的线程:将指定的线程函数放到pthread_creat中的pthread_attr_t *attr属性中创建线程
  4. 使用pthread_attr_destory()销毁该线程属性变量
下面以线程的分离属性举例

分离属性:
在这里插入图片描述
如图两个不同属性的线程

  • 不具有分离属性的线程运行结束后,线程不会自动释放资源,而是会进入僵尸态,需要手动释放资源,那么这种线程适合有返回值的线程,其他线程可以通过使用pthread_join()函数活动该线程的返回值后,然后让该线程释放资源。
  • 具有分离属性的线程,适合不具备返回值的话,则会自动释放资源。

代码实现

1.包含线程头文件:#include<pthread.h>
创建未分离线程的详细代码:
在这里插入图片描述
运行结果:
在这里插入图片描述
创建分离线程的详细代码:

在这里插入图片描述
运行结果:
在这里插入图片描述
主线程打印:非法参数
因为线程已经分离了,没有办法再接合这个返回值


第二种设置线程分离的方法:

pthread_detach()

在这里插入图片描述
在这里插入图片描述
但是这种方法会有两种情况:

  • 第一种:就是上图的运行结果,创建线程没有指定分离,创建成功后子线程自己分离,但是主线程比子线程快,因此主线程已经开始使用join函数去接合子线程了,就会输出abc
  • 第二种:子线程比主线程快,子线程已经完成了分离,主线程才调用join已经不能接合子线程了
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值