0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在Semaphore(信号量)和Mutex(互斥)之间做选择?

麦克泰技术 来源:麦克泰技术 2024-03-05 11:35 次阅读

在单CPU系统中,处理器是一个共享资源。在多个进程之间共享处理器时,处理器的使用由调度程序控制,不存在竞争问题。但对于系统的其它资源而言,情况并非如此。不同的任务可能需要同时使用同一硬件外设或内存区域。如果不控制这些公共资源的访问,系统中很快就会出现资源争用问题。

89b9932c-daa0-11ee-a297-92fbcf53809c.png

如何在Semaphore(信号量)和Mutex(互斥)之间做选择,应考虑以下的问题:

1、资源类型:

- 多个实例:如果多个任务可以同时访问资源,请使用信号量。

- 单个实例:如果一次只有一个任务需要访问资源,请使用互斥。

2、访问模式:

-非排他性访问:如果多个任务可以同时访问资源,请使用信号量。

- 独家访问:如果只有一个任务需要独家访问资源,请使用互斥。

3、所有权要求:

- 需要所有权:如果您需要强制执行所有权,请使用互斥,确保只有获得互斥的任务才能释放它。

- 无需所有权:如果所有权不是问题,请使用信号量。

4、性能:

-开销:由于所有权跟踪和优先级反转预防机制,与信号量相比,Mutex通常具有更高的开销。

- 速度:对于简单的同步任务,信号量通常更快。

5、优先反转:

-优先级反转:Mutexes具有防止优先级反转的机制(例如优先级继承),这在实时系统中可能很重要。

-无优先级反转:信号量没有防止优先级反转的内置机制。

6、复杂性:

- 简单性:在基本同步任务中,信号量更易于使用和理解。

- 复杂性:由于所有权和优先级反转考虑,Mutex可能会更加复杂。

小结

-信号量:用于对资源的非排他性访问,以及当一个资源的多个实例可以同时访问时。

- 互斥:用于独家访问资源,当一次只能访问一个任务访问资源时。




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18288

    浏览量

    222167
  • 信号量
    +关注

    关注

    0

    文章

    53

    浏览量

    8257

原文标题:如何在Semaphore和Mutex之间做选择?

文章出处:【微信号:麦克泰技术,微信公众号:麦克泰技术】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【安富莱】【RTX操作系统教程】第15章 互斥信号量

    第15章 互斥信号量 本章节开始讲解RTX的另一个重要的资源共享机制---互斥信号量Mutex,即Mutual Exclusion的缩写)
    发表于 01-30 17:40

    转:第23章 FreeRTOS互斥信号量

    本章节讲解FreeRTOS重要的资源共享机制---互斥信号量Mutex,即MutualExclusion的缩写)。注意,建议初学者学习完前两个章节的信号量后再学习本章节的
    发表于 09-06 14:58

    第15章 互斥信号量

    转rtx操作系统 本章节开始讲解RTX的另一个重要的资源共享机制---互斥信号量Mutex,即Mutual Exclusion的缩写)。注意,建议初学者学习完上个章节的信号量后再学习
    发表于 10-06 16:40

    信号量互斥锁、自旋锁

    区)信号量:是用来解决进程/线程之间的同步和互斥问题的一种通信机制,是用来保证两个或多个关键代码不被并发调用。信号量(Saphore)由一个值和一个指针组成,指针指向等待该
    发表于 08-29 09:48

    芯灵思SinlinxA33开发板的Linux内核信号量学习

    init_MUTEX_LOCKED (struct semaphore *sem);该函数也用于初始化一个互斥锁,但它把信号量sem的值设置为0,等同于sema_init (stru
    发表于 02-20 15:50

    芯灵思SinlinxA64开发板 Linux内核信号量学习

    信号量,并设置信号量sem的值为valvoid init_MUTEX (struct semaphore *sem);该函数用于初始化一个互斥
    发表于 03-15 16:10

    信号量互斥信号量该怎么选择

    既然说信号量可能会导致优先级反转,那全都在工程里使用互斥信号不就行了?还要信号量干啥?大家一起用互斥信号
    发表于 08-26 03:14

    ucosiii互斥信号量不起作用该怎么办?

    我在同一个任务中需多次使用串口发送数据。故有多次请求同一互斥信号量,在串口发送完成中断释放互斥信号量。仿真证明,互斥
    发表于 10-09 22:56

    关于UCOSIII的信号量互斥信号量的理解?

    信号量。如果其它任务中有请求信号量,且该任务优先级高于当前任务优先级,进行任务切换;如果其它任务中当前没有请求此信号量,或该任务优先级低于当前任务优先级,不进行任务切换?请求互斥
    发表于 03-13 00:11

    例程使用互斥信号量初始化如何设置?

    OS_MUTEXTEST_MUTEX; //定义一个互斥信号量//创建一个互斥信号量OSMutexCreate((OS_
    发表于 06-02 16:22

    信号量semphere概述

    APItx_semaphore_createtx_semaphore_deletetx_semaphore_gettx_semaphore_puttx_semaphore_put_notifysemaphore_demo概述ThreadX提供32位计数信号量,范围在0到4
    发表于 02-22 07:29

    FreeRTOS 队列 信号量 互斥

    文章目录前言Queue 队列semaphore 信号量Mutex 互斥量微信公众号前言FreeRTOS STM32CubeMX配置 内存管理 任务管理上节介绍了用STM32CubeMX
    发表于 12-09 09:51 0次下载
    FreeRTOS 队列 <b class='flag-5'>信号量</b> <b class='flag-5'>互斥</b>量

    ThreadX(六)------信号量semaphore

    APItx_semaphore_createtx_semaphore_deletetx_semaphore_gettx_semaphore_puttx_semaphore_put_notifysemaphore_demo概述ThreadX提供32位计数信号量,范围在0到4
    发表于 12-28 19:26 7次下载
    ThreadX(六)------<b class='flag-5'>信号量</b><b class='flag-5'>semaphore</b>

    使用Arduino在FreeRTOS中实现信号量互斥量的方式

    信号量互斥互斥)是用于同步、资源管理和保护资源免受损坏的内核对象。在本教程的前半部分,我们将了解Semaphore背后的理念,以及如何以及在何处使用它。
    的头像 发表于 08-16 15:34 1917次阅读
    使用Arduino在FreeRTOS中实现<b class='flag-5'>信号量</b>和<b class='flag-5'>互斥</b>量的方式

    Free RTOS的互斥信号量

    二进制信号量互斥量非常相似,但确实有一些细微的区别。互斥体包含优先级继承机制,而二进制信号量没有。这使得二进制信号量成为实现同步(任务
    的头像 发表于 02-10 15:36 784次阅读
    Free RTOS的<b class='flag-5'>互斥</b><b class='flag-5'>信号量</b>