linux系统编程:线程

1.wait函数

父进程要获得子进程的退出状态

   子进程
     exit(退出状态值)
    退出状态值 只有最低8位有效[0~255]

   父进程
wait(&status)
获取到退出状态值
WIFEXITED()//先判断是否为正常退出

WEXITSTATUS()//获取到exit传递的退出状态值

2.waitpid函数

功能:等待子进程状态发生变化

  参数:
             @pid pid>0 //表示等待 指定的子进程状态改变
              eg:100    //表示等待pid号为100的子进程状态改变

              @wstatus    //表示获取到 子进程 状态信息

               @options    //选项
                                  //可以不阻寒
                                  //默认是阻塞
       wait(&wstatus) <==>waipid(-1,&wstatus,0)

        pid =-1         //表示等待所有子进程

非阻塞调用:
waitpid(-1,&wstatus,WNOHANG)             //表示非阻塞调用

非阻塞调用和阻塞调用的区别

  1.阻塞

      会影响父进程处理逻辑

   2.非阻塞

     父进程回去查看子进程的状态变化,但是,如果没有发生变化,父进程不阻塞,整个程序继续往下。

      注:非阻塞必须套在循环中处理。 // 轮询

总结:1.wait 和waitpid都是等待子进程状态发生改变

           2.wait是一种阻塞调用 ---   调用进程,一般不做额外的事情

           3.waitpid可以实现非阻塞调用 ----  调用进程,逻辑一般不受影响。

3.线程         多任务技术

1.线程 -- 轻量级的进程

   进程 -- 重量级的进程

   线程成为cpu执行的最小单位

   进程成为资源分配的基本单位

    线程 创建 和调度时空开销都比进程小

2.线程组成

 线程tid 、程序计数器、寄存器集合、栈

3.线程与进程的关系

  1.线程是存在与进程中的

  2.线程共享了进程的资源(代码段,数据段,打开一些文件,信号等)

  3.线程结束,不一定导致进程结束

5.线程的编程

    1.线程的创建    pthread_create函数

功能:该函数可以创建指定的一个线程

参数:@thread  :线程id,需要实现定义并由该函数返回。

           @attr     :线程属性,一般是NULL,表示默认属性。

                           默认(可结合性) -- 自己手动回收

                           分离属性           -- 系统自动回收

          @start_routine     -- 线程的执行函数(线程回调函数)

                                       //指向指针函数的函数指针

                                      th  回调函数,是线程的执行空间

                                      注:线程回调函数 -- 完成线程任务功能的函数 ,需要调用者,自己实现

        @arg       回调函数的参数,即参数3的指针函数参数。

    返回值:成功 :  0             失败  :错误码

注:1.主函数所在的执行流 ---- 主线程

         2.其它的线程 ---- 子线程(次线程)

         3.各个线程间,地位是平等的      //对等

获得线程tid:

  pthread_self(); //在那个线程中调用,获得的就是哪个线程的tid

2.线程的退出

  1.pthread_exit函数

功能:结束调用的线程

   参数: @retval    //退出状态值//传的是退出状态值对应的地址

    注:1.pthread exit 本身表示结束线程,如果用在main函数中, 表示结束主线程,主线程结束 并不表示进程结束,此时,主线程执行流结束,进程会在其余线程都结束后结束。

   3.线程的资源回收

功能:等待线程结束

    参数:@thread   --- 线程tid

               @retval   ----用来保存,退出状态值所在空间的地址

   返回值 :  成功 :0                  失败:   错误码

  编译的时候:gcc  pthread_exit.c -lpthread

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值