信号量,计数值

问题:  还是那个AB任务互斥调度的问题,B等A执行完毕的过程中,判断标志位会耗费CPU资源

利用信号量,当没有信号的时候,不参与调度

计数信号量(不能用来传输数据)

static SemaphoreData_t xSemCalc;

Xsemcalc=xSemaphoreCreateCounting(10,0);//最大值,初始值

计算完成后信号量+1

当任务1计算还没完成的时候,任务2阻塞在xSemaphoreTake (设置了永远等待直到信号量到来)  ,当任务1计算完毕,信号量+1,任务2获取到信号量,打印

#include "semphr.h"

二进制信号量实现互斥,(使用串口)

SemaphoreHandle_t xBinarySemaphore;

xBinarySemaphore = xSemaphoreCreateBinary( );

xSemaphoreGive(xBinarySemaphore)    使串口可以使用

谁要用串口就要先获得信号量

xSemaphoreTake(xBinarySemaphore, portMAX_DELAY)

用完后再释放掉

xSemaphoreGive(xBinarySemaphore)    让其他人可以使用

互斥量

问题:上面的二进制信号量,正常是A用完A解锁,但是异常情况下(比如人编程问题),导致A还没用完就切换出去到C,C执行完毕后把A的信号量解锁了,此时B就有可能拿到信号量去使用串口,就跟A冲突在一起

解决办法: 谁上锁谁解锁(FREERTOS没有实现,只能靠程序员)

问题:优先级反转:

ABC任务优先级递增,A加了锁,B抢占,然后C抢占,C拿不到锁被阻塞,然后B开始运行,  明明C优先级最高,但是得不到执行

解决办法:优先级继承

ABC任务优先级递增,A加了锁,B抢占,然后C抢占,C拿不到锁被阻塞,LOCK的同时使加锁的A继承C的优先级(先执行),A执行后释放锁(又回归原来的优先级),C就可以执行,、

使用条件:使用mutex  自动实现优先级继承解决优先级反转的问题

问题:递归上锁

A执行函数加锁,嵌套的函数又想获得锁,就阻塞了,没办法解锁,形成死锁

解决办法:递归锁 (在锁上后,还可以获得这个锁【同一个】,一一配对解锁就行)

10-1OVER

使用互斥量实现互斥

static SemaphoreHandle_t xSemUART;
xSemUART = xSemaphoreCreateMutex(); void TaskGenericFunction(void * param)
{
while (1)
{
xSemaphoreTake(xSemUART, portMAX_DELAY);
printf("%s\r\n", (char *)param);
xSemaphoreGive(xSemUART);
vTaskDelay(1); //与
}
} xTaskCreate(Task1Function, "Task1", 100, NULL, 1, &xHandleTask1);
xTaskCreate(Task2Function, "Task2", 100, NULL, 1, NULL);

是个特殊的信号量

二级制信号量初始值是0,创建后需要Give -次; 斥量初始值是1,创建后不需要Give 次。

延时有什么区别vTaskDelay(1)  &

4- 信号量& 互斥量的更多相关文章

  1. OS: 读者写者问题(写者优先+LINUX+多线程+互斥量+代码)(转)

    一. 引子 最近想自己写个简单的 WEB SERVER ,为了先练练手,熟悉下在LINUX系统使用基本的进程.线程.互斥等,就拿以前学过的 OS 问题开开刀啦.记得当年学读者写者问题,尤其是写者优先的 ...

  2. 【转】【Linux】 临界区,互斥量,信号量,事件的区别

    原文地址:http://blog.itpub.net/10697500/viewspace-612045/ Linux中 四种进程或线程同步互斥的控制方法1.临界区:通过对多线程的串行化来访问公共资源 ...

  3. [转]一个简单的Linux多线程例子 带你洞悉互斥量 信号量 条件变量编程

    一个简单的Linux多线程例子 带你洞悉互斥量 信号量 条件变量编程 希望此文能给初学多线程编程的朋友带来帮助,也希望牛人多多指出错误. 另外感谢以下链接的作者给予,给我的学习带来了很大帮助 http ...

  4. Linux驱动学习笔记(6)信号量(semaphore)与互斥量(mutex)【转】

    转自:http://blog.chinaunix.net/uid-24943863-id-3193530.html 并发导致竟态,从而导致对共享数据的非控制访问,产生非预期结果,我们要避免竟态的发生. ...

  5. Linux多线程实践(5) --Posix信号量与互斥量解决生产者消费者问题

    Posix信号量 Posix 信号量 有名信号量 无名信号量 sem_open sem_init sem_close sem_destroy sem_unlink sem_wait sem_post ...

  6. linux 线程的同步 一 (互斥量和信号量)

    互斥量(Mutex) 互斥量表现互斥现象的数据结构,也被当作二元信号灯.一个互斥基本上是一个多任务敏感的二元信号,它能用作同步多任务的行为,它常用作保护从中断来的临界段代码并且在共享同步使用的资源. ...

  7. FreeRTOS的信号量和互斥量

    1. 理解如下,言简意赅的说,信号量解决同步,互斥量解决竞争. 信号量用于同步,主要任务间和中断间同步:互斥量用于互锁,用于保护同时只能有一个任务访问的资源,为资源上一把锁. 互斥量具有优先级继承,信 ...

  8. 信号量和互斥量C语言示例理解线程同步

    Table of Contents 1. 线程同步 1.1. 用信号量进行同步 1.2. 用互斥量进行同步 2. 参考资料 线程同步 了解线程信号量的基础知识,对深入理解python的线程会大有帮助. ...

  9. CPP-基础:windows api 多线程---互斥量、信号量、临界值、事件区别

    http://blog.csdn.net/wangsifu2009/article/details/6728155 四种进程或线程同步互斥的控制方法:1.临界区:通过对多线程的串行化来访问公共资源或一 ...

  10. 1.linux系统基础笔记(互斥量、信号量)

    操作系统是很多人每天必须打交道的东西,因为在你打开电脑的一刹那,随着bios自检结束,你的windows系统已经开始运行了.如果问大家操作系统是什么?可能有的人会说操作系统就是windows,就是那些 ...

随机推荐

  1. el-tree只展示前三个节点数据

    后端也返回了第四等级,但是不想让他展示,可以这样解决只展示前三等级 // 获取room树 getRoomTreeList() { getRoomTree().then((res) => { // ...

  2. ROS之交叉编译配置

    参考资料: https://zhuanlan.zhihu.com/p/183819313 https://www.guyuehome.com/33759 1.原理 所谓的交叉编译,其实我们可以从编译原 ...

  3. 教你用JavaScript实现粘性导航

    案例介绍 欢迎来的我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个粘性导航.移动页面导航仍在页面上方.通过实战我们将学会scrollY属性.offse ...

  4. 双层nn逻辑回归BP过程的另外一种解释

    双层nn逻辑回归 吴恩达的双层nn逻辑回归的一些符号说明比较复杂导致视频难以理解,这里简单做一个说明 注意:阅读下面内容需要具备基本的矩阵求导知识 下面是手推过程,有空在进行修改

  5. Kubernetes 1.26.0实战:在本地配置k8s集群

    阶段一:开发环境及版本 以下环境均来自官网: 本地宿主机环境:Windows 10 21H2 64位 虚拟机软件:VMware workstation 15.5 pro 虚拟机镜像版本:ubuntu- ...

  6. NC23051 华华和月月种树

    题目链接 题目 题目描述 华华看书了解到,一起玩养成类的游戏有助于两人培养感情.所以他决定和月月一起种一棵树.因为华华现在也是信息学高手了,所以他们种的树是信息学意义下的. 华华和月月一起维护了一棵动 ...

  7. jq 完成复选框的全选和全不选,并组装成数组发送到后台

    jQuery 代码实现,HTML dom节点对应js的id 即可 <script> $(function() { //复选框全选和全不选 $("#selectAll") ...

  8. python第五章pta习题总结

    四.编程部分 1.sorted函数: sorted(iterable, cmp=None, key=None, reverse=False) #iterable:可迭代的对象 #cmp:比较规则 #k ...

  9. 跨越千年医学对话:用AI技术解锁中医古籍知识,构建能够精准问答的智能语言模型,成就专业级古籍解读助手(LLAMA)

    跨越千年医学对话:用AI技术解锁中医古籍知识,构建能够精准问答的智能语言模型,成就专业级古籍解读助手(LLAMA) 介绍:首先在 Ziya-LLaMA-13B-V1基线模型的基础上加入中医教材.中医各 ...

  10. C++的strcat实现

    #include <iostream> #pragma warning(disable:4996); using namespace std; char* t = (char*)mallo ...