2024年8月14日嵌入式学习

进入主要复习进程的的操作和学习了线程的基本知识

进程

1.创建 ---fork  


          //创建一个子进程 
          //创建多个子进程 
          //创建好之后,能区分父子进程代码的逻辑 


2.执行 


  a.做与父进程相同的事情 
  b.做与父进程不同的事情
    fork + exec //minishell 


3.进程的退出


  return 
  exit
  _exit
//atexit  


4.两个特殊状态 


  孤儿进程 --- 没有危害 ,不需要处理 
  僵尸态进程 --- 处理 
  wait 
  waitpid

线程

多任务的技术: 线程 


1.什么是线程 


  线程 --轻量级的进程 
         light weight 

2.为什么需要线程?


  
  进程的产生  ----- fork

  线程 --- 轻量级的进程  
  进程 --- 重量级的进程 
  
  线程 成为 CPU执行的最小单位 
  进程 成为 资源分配的基本单位 

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

3. 线程组成


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


4. 线程与进程的关系


  a.线程 是 存在于 进程中的 
  b.线程 共享了进程的资源 (代码段,数据段,打开一些文件,信号等)
  c.线程结束,不一定导致进程结束 
  


5.线程的编程 


  类似与进程过程 
  
  线程函数 
  Red hat / IBM
         //thinkpad   
  ubuntu 
  contos //服务器上 --- linux系统运维 
  
  red hat 实现的一套线程函数 //NPTL线程库
  NPTL (New Posix Thread Library) 
  
  a.线程的创建  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
            失败 错误码             
    

注:
   1. 主函数所在的执行流 --- 主线程 
   2. 其它的线程   ---  子线程(次线程)   
   3. 各个线程间 低位是平等  //对等 

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

  b.线程的执行   --- 就体现在线程的 执行函数(回调函数)上


  线程的退出
  


  方式1 
     pthread_exit 
      
    void pthread_exit(void *retval)
    功能:
         结束调用的线程 
    参数:
       @retval  //退出状态值  //传的是,退出状态值 对应的地址 
      
    注意:
      1.pthread_exit 本身表示结束线程 
        如果用在main函数中 表示结束主线程 
        主线程结束 并不表示进程 
        此时,
        主线程执行流结束,进程会在其余线程都结束后,结束 
        
     
  d.线程的资源回收 
  int pthread_join(pthread_t thread, void **retval);


  功能:
       等待线程结束 
  参数:
     @thread  --- 线程tid  
     @retval  --- 用来保存,退出状态值,所在空间的地址 
     
 返回值:
    成功 0
    失败 错误码 
  注:
     线程退出时,可以带出退出状态值,
     但是传的是,退出状态值对应空间的地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值