嵌入式学习---进程借宿函数wait/waitpid,以及线程相关

一.有关进程结束的函数

1.atexit函数用于注册“退出清理函数”,且可以多次注册,但是调用顺序与注册顺序相反

注:退出清理函数需要是用户自定义的函数

2.wait函数:单纯阻塞调用

功能:(1)获取进程退出状态

(2)回收资源(销毁僵尸态)

wait一般要与exit配合使用

3.waitpid函数

#include <sys/types.h> 
#include <sys/wait.h>
pid_t waitpid(pid_t pid,int *status,int options);

options//选项有两种,默认是填0,表示默认,会造成阻塞效果

另一种是WNOHANG,不会阻塞

pid = -1时,意味着父进程等待所以子进程结束

pid >0时,意味着父进程等待指定的子进程结束

非阻塞与阻塞区别:

阻塞:父进程等待子进程,若父进程内有直接的工作且逻辑上位于waitpid函数后面都会不执行,直到子进程结束

非阻塞:父进程会查看子进程状态,当子进程没有状态改变时,父进程会执行自己的任务,等待下一次再来查看(故使用非阻塞时要写入循环)

二.与线程相关的函数

1.线程与进程:线程是cpu执行的最小单位

进程是资源分配的基本单位

线程相对于进程的优点:线程的创建和调度时空开销都比进程小,故适合于多任务的场景

比如:淘宝,12306等软件

2.线程的组成:tid号,程序计数器,寄存器集合,栈

3.线程与进程之间的关系:(1)线程存在于进程中

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

4.线程的编程:

1)创建   pthread_create

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

   功能:该函数可以创建指定的一个线程。
    参数:
         @thread 线程id,需要实现定义并由该函数返回。
         @attr   线程属性,一般是NULL,表示默认属性。(可结合性+分离属性)
                 默认(可结合性) -- 自己手动回收
                 分离属性       -- 系统自动回收 
        @start_routine  -- 线程执行函数 (线程回调函数)
                //指向[指针函数的] 函数指针。
                  本质上是一个函数的名称即可。
                称为
                  th 回调函数,是线程的执行空间。
                  {
                  }
                //注: 线程回调函数 --完成线程任务功能的函数 
                //    需要调用者 自己实现
        @arg  回调函数的参数,即参数3的指针函数参数。
    返回值:成功 0
            失败 错误码    

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

2)线程的退出:

pthread_exit

 void pthread_exit(void *retval)
    功能:
         结束调用的线程 
    参数:
       @retval  //退出状态值  //传的是,退出状态值 对应的地址 
      
    注意:
      1.pthread_exit 本身表示结束线程 
        如果用在main函数中 表示结束主线程 
        主线程结束 并不表示进程 
        此时,
        主线程执行流结束,进程会在其余线程都结束后,结束 
        
      
  (3)线程的资源回收 
  int pthread_join(pthread_t thread, void **retval);功能类似于wait
  功能:
       等待线程结束 
  参数:
     @thread  --- 线程tid  
     @retval  --- 用来保存,退出状态值,所在空间的地址 
     
 返回值:
    成功 0
    失败 错误码 
  注:
     线程退出时,可以带出退出状态值,
     但是传的是,退出状态值对应空间的地址

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值