当前位置: 首页 > news >正文

2024年8月15日嵌入式学习

今日主要学习线程和线程的互斥锁

pthread_cancel函数

它用于取消一个线程,当一个线程收到取消的申请时,他不会立即停止,而是在下一个取消点处结束运行,取消点是程序中一个特定的位置。如果线程在执行一个不可中断的系统调用,他将执行一到调用完成。

pthread_detach函数

可分离属可分离属性    ---子线程运行很久才结束 ---  设置分离属性 

功能:
         分离线程 
    参数:
        thread 要分离的线程的tid
    返回值:
          成功 0
        失败 错误码 

总结


1.创建 -- pthread_create 
2.执行 -- 线程执行函数 
3.退出 -- pthread_exit 
          return  //线程执行函数中 
          pthread_cancel 
          exit() //return 从main   
4.资源回收 
       可结合性 --- pthread_join    //这种用于 ,线程任务较短,主线程需要关心子线程状态 
       可分离性 --- pthread_detach  //子程序执行任务较长,主线程也不需要关心子线程状态 

对比 线程 和 进程 

1.线程 vs 进程 
线程 CPU执行的最小单位 
进程 资源分配和任务调度基本单位 

2. 各自特点 (优缺点)

 //1.创建 和 调度
  线程 
      创建速度快 
      调度速度快 
      
      //并发程度 更高 
      
 //2. 安全性 
    
    线程 
        好处:共享了进程的数据空间 
        共享数据方面 方便 
        缺点:
          安全性不好                   //
          带来资源竞争                //专门的技术 解决资源竞争  --- 互斥 同步 
    进程 
        进程空间相互独立 
        好处,
            安全性好 
        缺点:
            进程间共享数据不方便      //进程间通信   (管道,信号,共享内存)


      互斥锁           

 

定义互斥锁:
    pthread_mutex_t   mutex;


    互斥锁类型        互斥锁变量 内核对象 
    
   初始化锁
    pthread_mutex_init(); //初始化一把锁    
    
   参数:
      @mutex     //就是要初始化的 互斥锁变量 
      @attr      //属性  
                 //NULL 默认属性  --- 普通锁 
                 //读写锁 


   加锁                      //加锁 加在 要访问临界资源的地方 
       pthread_mutex_lock(); //上锁 
   解锁 
       pthread_mutex_unlock(); //解锁  临界资源访问之后就解开
   销毁
       pthread_mutex_destroy();//销毁一把锁 

 参数:
          @mutex    //要操作的那把锁 

线程间的顺序问题:
//同步操作 

强调的是线程的 顺序问题 
信号量     //交通信号灯 
           //实现一种可以让线程间有序访问临界资源的方式
   
信号量   --- 可以顺序操作的一把锁

http://www.lryc.cn/news/425267.html

相关文章:

  • C++引用和指针的区别还分不清楚?
  • 【Cesium开发实战】相机捕捉功能,获取当前视图,设定分辨率可下载当前视图图片
  • 基于spring boot的疫情信息管理系统
  • 【秋招笔试】8.11大疆秋招(第二套)-测开岗
  • Vitis AI 基本认知(训练过程)
  • 《SQL 约束:保障数据完整性与准确性的关键防线》
  • Temu半托管即将开通日韩站点,Temu半托管怎么上产品?
  • 谷歌、火狐、Edge浏览器使用allWebPlugin中间件加载ActiveX控件
  • Python利用openpyxl复制Excel文件且保留样式—另存为副本(附完整代码)
  • ITL-Internet Technology Letters
  • Mapreduce_wordcount自定义单词计数
  • 安卓开发中的AppCompat框架使用详解
  • docker中挂桶什么意思
  • 鸿蒙开发Location Kit(位置服务)如何设置
  • O2OA开发知识-后端代理/接口脚本编写也能像前端一样用上debugger
  • 树莓集团:引领数字影像技术培训的标杆
  • 为什么老实人普遍难拿高薪?这个答案让我醍醐灌顶!30岁的我决定开始改变
  • react的pdf转图片格式上传到后端
  • 【STM32 FreeRTOS】任务通知
  • 51单片机学习
  • vue项目实现postcss-pxtoremvue大屏适配
  • 如何打造爆款游戏?开发由你操刀,运维交由我托管,合作共赢创造更大成功
  • 颈部按摩仪语音播报芯片方案,高品质语音IC,NV080D
  • Opencv模板匹配
  • JavaScript DOM事件监听器:深入解析与实践应用
  • iOS的App启动详细过程(底层知识)
  • 【轨物推荐】创新者的钥匙:如何破解创新的最大难题
  • SpringCloud的能源管理系统-能源管理平台源码
  • Mybatis获取主键自增的方法
  • strip 、objdump、objcopy 差异与区别