news 2026/10/10 17:40:02

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

作者头像

张小明

前端开发工程师

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

线程控制:互斥与同步

互斥(Mutex)

概念
在多线程环境中,互斥用于保证对临界资源(如全局变量、文件、设备)的排他性访问。当多个线程并发执行时(如th1和th2交替运行),对共享资源的非原子操作(如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/10/10 5:35:41

从蓝图到产线:高效产品信息传递的桥梁建设

在制造业中,研发设计的精妙构思与生产部门的高效执行之间,存在着一条至关重要的信息传递链。这条链路的畅通与否,直接决定了产品能否从图纸精准、准时地转化为合格的商品。本文将深入探讨这一过程的标准实践、常用工具、潜在挑战及其优化方案…

作者头像 李华
网站建设 2026/10/10 2:16:27

时间复杂度

这种题目是数据结构与算法考研(如408)或面试中的高频送分题,但也是高频陷阱题。 复习这类题目,不要靠“猜”或者“死记硬背”,而是要掌握一套**“数学建模”**的方法。一旦你建立了数学直觉,这类题看一眼就…

作者头像 李华
网站建设 2026/10/9 22:26:48

网站建设公司怎么选?2025年网站设计制作公司推荐指南

在数字化转型加速的2025年,企业网站已从基础展示工具升级为品牌价值载体与业务增长引擎。面对市场上众多的网站建设服务商,企业如何选择真正具备专业设计能力、技术实力与可靠服务的合作伙伴成为关键考量。本文通过对蒙特网站、IPG、电通等多家网站建设公…

作者头像 李华
网站建设 2026/10/8 23:17:30

今天咱们来聊一个挺有意思的优化算法改进——基于透镜成像反向策略的海洋捕食者算法。这个改进版本在原始MPA基础上搞了点新花样,咱们直接上干货看代码实现

基于透镜成像反向策略的多策略改进海洋捕食者优化算法 算法改进先看这个反向策略的实现。透镜成像反向学习可不是简单的镜像对称,它通过引入缩放因子让反向解更灵活。咱们来看这段关键代码: def lens_opposite(position, lb, ub, alpha0.8):focal_point …

作者头像 李华
网站建设 2026/10/8 14:24:48

Gitee:本土化DevOps平台如何重塑中国开发者生态

Gitee:本土化DevOps平台如何重塑中国开发者生态 在数字化转型浪潮席卷全球的当下,中国开发者正迎来前所未有的机遇与挑战。作为国内领先的一站式DevOps平台,Gitee凭借其独特的本土化优势,正在重新定义代码托管与协作开发的行业标准…

作者头像 李华
网站建设 2026/10/9 22:03:52

vCenter Server 8.0U3h 新增功能简介

VMware vCenter Server 8.0U3h 发布 - 集中管理 vSphere 环境 Server Management Software | vCenter 请访问原文链接:https://sysin.org/blog/vmware-vcenter-8-u3/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org vSphere 8…

作者头像 李华