当前位置:首页 > 生活资讯 > 正文内容

信号量和互斥量区别(信号量实现互斥的优缺点)

2023-04-26 16:42:05生活资讯1

信号量实现互斥的优缺点

互斥是指两个或多个事件或条件之间的互相排斥或矛盾关系。具体来说,当某个条件或事件发生时,其它条件或事件就不可能发生。

这种关系可以看做是两者之间的排他性,即只能有一个成立,而另一个必须被排除。

这种性质在计算机领域、电路设计和系统开发等方面有很重要的应用。

例如,在操作系统中,多个进程可能需要共享同一个资源,但是同一时刻只能有一个进程使用该资源,因此系统需要通过互斥机制来实现对共享资源的访问控制。

在电路设计中,互斥也是很常见的概念,如同步电路中的互斥使得多个信号在时序上具有排他性,从而确保电路的正确操作。总之,互斥是一种非常重要的概念,其应用广泛且与人们的生活息息相关。

用信号量机制实现互斥时,信号量的初值是

PID是一个进程的ID号,每一个进程只有一个PID,但不同的进程的PID是会改变的。

  知识扩展:

  进程ID和身份证的ID有不同的意义,身份证的ID是不可以该改变的。

  当要运行一个应用程序时,里面包含多个进程,当执行完所有的进程时,这个程序才会被启动,进程之间的ID号是不同的。

  例子:

   某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,厅外的购票者可立即进入,否则需要在外面等待。每个购票者可看成一个进程。

分析:

第一步:确定进程间的关系。售票厅是各进程共享的公有资源,当售票厅中多于20名购票者时,厅外的购票者需要在外面等待。所以进程间是互斥的关系。

第二步:确定信号量及其值。只有一个公有资源:售票厅,所以设置一个信号量s。售票厅最多容纳20个进程,即可用资源实体数为20,s的初值就设为20。

最近从网上看到了一种对PID的解释,比较通俗易懂,也好记住,经过自己的整理后说明如下。

控制模型:你控制一个人让他以PID控制的方式走110步后停下。

(1)P比例控制,就是让他走110步,他按照一定的步伐走到一百零几步(如108步)或100多步(如112步)就停了。

说明:P比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。

(2)PI积分控制,就是他按照一定的步伐走到112步然后回头接着走,走到108步位置时,然后又回头向110步位置走。在110步位置处来回晃几次,最后停在110步的位置。

说明:在积分I控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(System with Steady-state Error)。为了消除稳态误差,在控制器中必须引入积分项。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。

(3)PD微分控制,就是他按照一定的步伐走到一百零几步后,再慢慢地向110步的位置靠近,如果最后能精确停在110步的位置,就是无静差控制;如果停在110步附近(如109步或111步位置),就是有静差控制。

说明:在微分控制D中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳,其原因是由于存在有较大惯性组件(环节)或有滞后

信号量机制实现互斥

每当任务、队列和信号量创建的时候,FreeRTOS要求分配一定的RAM。虽然采用malloc()和free()函数可以实现申请和释放内存的功能,但这两个函数存在以下缺点:并不是在所有的嵌入式系统中都可用,要占用不定的程序空间,可重人性欠缺以及执行时间具有不可确定性。

为此,除了可采用malloc()和free()函数外,FreeRTOS还提供了另外两种内存分配的策略,用户可以根据实际需要选择不同的内存分配策略。

信号量解决互斥问题

信号量:线程通信;

锁:线程同步;

mutex只能由加锁的线程释放,而binary semaphore的打开和关闭可以由不同的线程操作。

加锁的作用是保护共享资源,只允许一个线程进入临界区,而binary semaphore由另外的一个线程释放(sem_

post)后,其他在等待(sem_wait)信号量的线程中会有一个进入到临界区,无法起到保护共享资源的作用。反而由此可以看出

semaphore的线程通信作用。

信号量实现互斥的优缺点是什么

互斥优先级是一种特殊的二值信号量,它和信号量不同的是,它支持互斥量所有权、递归访问以及防止优先级翻转的特性,用于实现对临界资源的独占式处理。任意时刻互斥量的状态只有两种,开锁或闭锁。

在很多场合中,某些资源只有一个,当低优先级任务正在占用该资源的时候,即便高优先级任务也只能乖乖的等待低优先级任务使用完该资源后释放资源。

这里高优先级任务无法运行而低优先级任务可以运行的现象称为“优先级翻转”。

优先级翻转会导致系统的高优先级任务阻塞时间过长。

互斥量就是用来降低优先级翻转产生的危害。 

信号量用于用户空间的互斥

FreeRTOS是一个实时操作系统内核,专门设计用于小型嵌入式系统。它提供了一组API函数,可以用于管理任务、时间、信号量、互斥体、消息队列和软件定时器等各种资源。

FreeRTOS的内核具有以下几个主要特点:

1. 简单易学:FreeRTOS的API非常简单,并且提供了广泛的在线文档和示例代码。

2. 小巧灵活:FreeRTOS的内核代码非常小,通常只需要几十KB的ROM空间和几KB的RAM空间。同时,它支持多种处理器架构和多种编译器。

3. 可移植性强:FreeRTOS的内核代码是高度可移植的,可在许多不同的处理器上运行,包括ARM、MIPS、x86等。

4. 实时性高:FreeRTOS内核采用优先级调度算法,任务响应时间非常短,可满足许多实时需求。

5. 低功耗:FreeRTOS的内核代码非常精简,可以帮助开发人员最大化地减少系统的能耗。

总之,FreeRTOS是一个功能强大、灵活、小巧、高效、可移植的实时操作系统内核,适合于小型嵌入式系统的开发。

信号量实现互斥的优缺点是

mutex为互斥信号量,其初值为1,取值范围为(-1, 0, 1)。 当mutex=1时,表示两个进程皆未进入需要互斥的临界区;当mutex=0时,表示有一个进程进入临界区运行,另外-一个必须等待,挂入阻塞队列;当mutex=-1时,表示有一个进程正在临界区运行,另外一个进程因等待而阻塞在信号量队列中,需要被当前已在临界区运行的进程退出时唤醒。

信号量 互斥

信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。

在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。

为了完成这个过程,需要创建一个信号量VI,然后将Acquire Semaphore VI以及Release Semaphore VI分别放置在每个关键代码段的首末端。

确认这些信号量VI引用的是初始创建的信号量。

信号量实现互斥的优缺点有哪些

  举例说明:   假如把整条道路看成是一个【进程】的话,那么马路中间白色虚线分隔开来的各个车道就是进程中的各个【线程】了。   

①这些线程(车道)共享了进程(道路)的公共资源(土地资源)。   

②这些线程(车道)必须依赖于进程(道路),也就是说,线程不能脱离于进程而存在(就像离开了道路,车道也就没有意义了)。   

③这些线程(车道)之间可以并发执行(各个车道你走你的,我走我的),也可以互相同步(某些车道在交通灯亮时禁止继续前行或转弯,必须等待其它车道的车辆通行完毕)。   

④这些线程(车道)之间依靠代码逻辑(交通灯)来控制运行,一旦代码逻辑控制有误(死锁,多个线程同时竞争唯一资源),那么线程将陷入混乱,无序之中。   

⑤这些线程(车道)之间谁先运行是未知的,只有在线程刚好被分配到CPU时间片(交通灯变化)的那一刻才能知道。   注:   由于用于互斥的信号量sem与所有的并发进程有关,所以称之为公有信号量。公有信号量的值反映了公有资源的数量。只要把临界区置于P(sem)和V(sem)之间,即可实现进程间的互斥。就象火车中的每节车厢只有一个卫生间,该车厢的所有旅客共享这个公有资源:卫生间,所以旅客间必须互斥进入卫生间,只要把卫生间放在P(sem)和V(sem)之间,就可以到达互斥的效果。

本网站文章仅供交流学习 ,不作为商用, 版权归属原作者,部分文章推送时未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知,我们将立即删除.

本文链接:https://www.xibujisuan.cn/98800096.html