news 2026/4/3 4:11:11

自学嵌入式day33,互斥和同步

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自学嵌入式day33,互斥和同步

线程控制:互斥与同步

互斥(Mutex)

概念
在多线程环境中,互斥用于保证对临界资源(如全局变量、文件、设备)的排他性访问。当多个线程并发执行时(如th1th2交替运行),对共享资源的非原子操作(如a++对应的多步汇编指令)可能导致数据不一致。互斥锁通过将临界区代码封装为原子操作(一次线程调度中必须完整执行),确保同一时刻仅有一个线程访问资源。

使用步骤

  1. 定义互斥锁

    pthread_mutex_t mutex;
  2. 初始化锁

    int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
    • attr通常设为NULL(默认属性)。
    • 返回值:成功返回0,失败返回非零值。
  3. 加锁

    int pthread_mutex_lock(pthread_mutex_t *mutex);
    • 若锁已被占用,则阻塞当前线程。
    • 临界区代码需短小,避免耗时操作或休眠。
  4. 解锁

    int pthread_mutex_unlock(pthread_mutex_t *mutex);
  5. 销毁锁

    int pthread_mutex_destroy(pthread_mutex_t *mutex);

同步(Semaphore)

概念
同步是互斥的扩展,用于控制线程执行的先后顺序。与互斥锁不同:

  • 互斥锁:加锁和解锁由同一线程完成。
  • 信号量:线程可交叉释放资源(如th1释放th2的资源)。
  • 计数信号量:初值可大于1(如资源池),支持多线程并发访问。

使用步骤

  1. 定义信号量

    sem_t sem;
  2. 初始化信号量

    int sem_init(sem_t *sem, int pshared, unsigned int value);
    • pshared=0:线程间共享;pshared≠0:进程间共享。
    • value:初始资源数(如二值信号量设为1)。
  3. P/V 操作

    • P 操作(申请资源)
      int sem_wait(sem_t *sem); // 资源不足时阻塞
    • V 操作(释放资源)
      int sem_post(sem_t *sem); // 释放后信号量值 +1
  4. 销毁信号量

    int sem_destroy(sem_t *sem);

死锁

产生条件
死锁由以下四个必要条件同时满足导致:

  1. 互斥条件:资源仅能被一个线程占用。
  2. 请求与保持:线程阻塞时仍持有已获取的资源。
  3. 不可剥夺:资源在使用完前不能被强制释放。
  4. 循环等待:线程间形成环形资源依赖链。

预防策略

  • 破坏任一条件即可避免死锁,例如:
    • 按固定顺序申请锁。
    • 设置锁超时机制。

互斥 vs. 信号量
特性互斥锁信号量
资源数量单一资源可多资源(计数信号量)
加解锁主体同一线程可跨线程交叉释放
适用场景短临界区允许休眠或耗时操作

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/29 9:10:21

解码IPD咨询价值:让研发管理从“被动救火”到“主动领跑”

在数智时代的激烈竞争中,企业研发环节的效率与质量直接决定市场竞争力。不少企业陷入“产品同质化严重”“研发周期冗长”“需求与市场脱节”的困境,而IPD(集成产品开发)体系作为经过华为等标杆企业验证的高效研发管理模式&#x…

作者头像 李华
网站建设 2026/4/1 21:41:43

Flutter OpenHarmony 运动App水分摄入追踪组件开发

前言 水分摄入追踪是运动健康应用中帮助用户保持良好水合状态的重要功能。运动过程中和日常生活中保持充足的水分摄入对健康至关重要。本文将详细介绍如何在Flutter与OpenHarmony平台上实现水分摄入追踪组件,包括饮水记录、目标设定、提醒功能等模块的完整实现方案…

作者头像 李华
网站建设 2026/4/1 17:46:02

【计算机毕设】基于python的运维管理平台的设计与实现

💟博主:程序员小俊:CSDN作者、博客专家、全栈领域优质创作者 💟专注于计算机毕业设计,大数据、深度学习、Java、小程序、python、安卓等技术领域 📲文章末尾获取源码数据库 🌈还有大家在毕设选题…

作者头像 李华
网站建设 2026/3/30 13:48:36

美容行业的未来:当科技照进美与健康

在繁华都市的一角,有一家开了五年的医美机构。创始人李医生每天早晨打开电脑,不再需要从三四个系统中切换查看——分店的运营数据、今日预约、库存情况和客户跟进,如今静静地呈现在同一个界面里。这细微的变化,是他过去五年梦寐以…

作者头像 李华
网站建设 2026/4/1 11:00:27

LLC谐振变换器的控制策略多种多样,今天咱们就来聊聊几种常见的闭环仿真方法,顺便用Matlab/Simulink来搞点代码,看看这些控制策略在实际中是怎么玩的

LLC谐振变换器常用控制的闭环仿真。 1. 变频控制PFM 2. PFM电压电流双环控制 3. PWM控制,占空比控制 4. Burst控制,间歇控制,着重于轻载调节 5. ADRC,自抗扰控制,相比PI动态响应更快 运行环境为matlab/simulink1. 变频…

作者头像 李华
网站建设 2026/3/29 0:41:31

自动化测试的痛点与发展趋势

前几天在技术交流群里,大家讨论了很多关于自动化测试落地面临的痛点和如何创造价值的话题,颇有感触。 自动化测试这个话题,从出现到在国内大规模开展实践,有很长的一段时间了。早期,大家对自动化测试的理解和使用目的…

作者头像 李华