linux系统:线程概念以及相关函数(pthread_self、pthread_detach、pthread_join、pthread_equal)介绍

线程介绍

  • 同时执行四个线程的进程:
    在这里插入图片描述

  • 线程共享的一些数据:
    在这里插入图片描述

  • 终止线程:

    1. 在线程里面调用return 可以终止线程
    2. 线程里面,不管那个线程的子函数调用pthread_exit(),该线程都会退出
    3. 调用pthread_cancel取消线程
    4. 任意线程调用了exit,或者主线程执行了return 语句,都会导致进程中所有线程停止
    5. 主线程中调用pthread_exit(),不会影响进程中的其它线程
    /************************
    函数功能:返回调用线程ID,和pthread_create的第一个参数thread的值相同
    返回值:  This function always succeeds, returning the calling thread's ID.
    ************************/
    #include <pthread.h>
    
    pthread_t pthread_self(void);
    
    
    /************************
    函数功能:比较两个线程ID是否相同,因为pthread_t是一种不透明的数据结构,我们不能简单的用C语言中的等号来比较,这样移植性太差
    返回值:If  the  two  thread  IDs  are equal, pthread_equal() returns a nonzero
           value; otherwise, it returns 0.
    ************************/
    #include <pthread.h>
    
    pthread_t pthread_equal(void);
    
    
    1. linux线程实现中,线程ID在所有进程中都是唯一的,不过在其它实现中未必如此
    2. POSIX线程ID与linux专有的系统调用gettid所返回的线程ID并不相同,前者由线程库管理,后者由内核分配管理
  • pthread_join(等待标识为thread的线程终止,这一过程也可以被称为连接)调用需要注意的地方:

    1. 线程之间关系对等,就算线程A创建了线程B,B也可以pthread_joinA,不像进程间,只能父进程wait子进程
    2. 无法,连接任意线程,换句话说只能连接同一个线程组的线程,也不能以非阻塞的形式连接
  • pthread_detach函数是设置调用线程处于分离状态,此时不能使用pthread_join来获取其状态,也无法使其从返回可连接状态,此状态下,线程结束后,会自动清楚相关占用的资源,也就是会自动收尸,不会变成僵尸线程,如果线程没有处于分离状态,就必须调用pthread_join为其收尸,否则会处于僵尸状态,占用系统资源,导致无法在创建线程,但是主线程执行return退出还是会影响分离状态下的线程

    //线程分离
    pthread_detach(pthread_self())
    
  • 使用线程注意:

    1. 尽量避免使用信号
    2. 所有线程尽量服务于一个应用程序
    3. 除了数据,线程还可以共享其它信息(文件描述符、信号处置、当前工作目录等)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值