4- 信号量& 互斥量
信号量,计数值
问题: 还是那个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- 信号量& 互斥量的更多相关文章
- OS: 读者写者问题(写者优先+LINUX+多线程+互斥量+代码)(转)
一. 引子 最近想自己写个简单的 WEB SERVER ,为了先练练手,熟悉下在LINUX系统使用基本的进程.线程.互斥等,就拿以前学过的 OS 问题开开刀啦.记得当年学读者写者问题,尤其是写者优先的 ...
- 【转】【Linux】 临界区,互斥量,信号量,事件的区别
原文地址:http://blog.itpub.net/10697500/viewspace-612045/ Linux中 四种进程或线程同步互斥的控制方法1.临界区:通过对多线程的串行化来访问公共资源 ...
- [转]一个简单的Linux多线程例子 带你洞悉互斥量 信号量 条件变量编程
一个简单的Linux多线程例子 带你洞悉互斥量 信号量 条件变量编程 希望此文能给初学多线程编程的朋友带来帮助,也希望牛人多多指出错误. 另外感谢以下链接的作者给予,给我的学习带来了很大帮助 http ...
- Linux驱动学习笔记(6)信号量(semaphore)与互斥量(mutex)【转】
转自:http://blog.chinaunix.net/uid-24943863-id-3193530.html 并发导致竟态,从而导致对共享数据的非控制访问,产生非预期结果,我们要避免竟态的发生. ...
- Linux多线程实践(5) --Posix信号量与互斥量解决生产者消费者问题
Posix信号量 Posix 信号量 有名信号量 无名信号量 sem_open sem_init sem_close sem_destroy sem_unlink sem_wait sem_post ...
- linux 线程的同步 一 (互斥量和信号量)
互斥量(Mutex) 互斥量表现互斥现象的数据结构,也被当作二元信号灯.一个互斥基本上是一个多任务敏感的二元信号,它能用作同步多任务的行为,它常用作保护从中断来的临界段代码并且在共享同步使用的资源. ...
- FreeRTOS的信号量和互斥量
1. 理解如下,言简意赅的说,信号量解决同步,互斥量解决竞争. 信号量用于同步,主要任务间和中断间同步:互斥量用于互锁,用于保护同时只能有一个任务访问的资源,为资源上一把锁. 互斥量具有优先级继承,信 ...
- 信号量和互斥量C语言示例理解线程同步
Table of Contents 1. 线程同步 1.1. 用信号量进行同步 1.2. 用互斥量进行同步 2. 参考资料 线程同步 了解线程信号量的基础知识,对深入理解python的线程会大有帮助. ...
- CPP-基础:windows api 多线程---互斥量、信号量、临界值、事件区别
http://blog.csdn.net/wangsifu2009/article/details/6728155 四种进程或线程同步互斥的控制方法:1.临界区:通过对多线程的串行化来访问公共资源或一 ...
- 1.linux系统基础笔记(互斥量、信号量)
操作系统是很多人每天必须打交道的东西,因为在你打开电脑的一刹那,随着bios自检结束,你的windows系统已经开始运行了.如果问大家操作系统是什么?可能有的人会说操作系统就是windows,就是那些 ...
随机推荐
- a标签download属性跨域问题
1.如果是加载了非同源的内容,该属性将失效,等于导航功能 2.在服务端设置Content-Disposition,使用HTTP响应头Content-disposition进行处理 3.先下载数据文件, ...
- Redis中的key的生存时间和过期时间
目录 1.说明 2.指令 2.1.删除和更新 3.过期时间的保存 4.计算剩余生存时间 5.过期键的删除策略 5.1.定时删除 5.2.惰性删除 5.3.定期删除 1.说明 生存时间: (Time T ...
- vue-cli3创建多页面应用
首先用vue-cli3创建工程,我的全局安装了vue-cli2,又不想卸载掉:所以新建了一个文件夹安装vue-cli3:然后在该文件夹下创建工程: 同时安装vue-cli2和vue-cli3参考:ht ...
- 【奶奶看了都会】Meta开源大模型LLama2部署使用教程,附模型对话效果
1.写在前面 就在7月19日,MetaAI开源了LLama2大模型,Meta 首席科学家.图灵奖获得者 Yann LeCun在推特上表示Meta 此举可能将改变大模型行业的竞争格局.一夜之间,大模型格 ...
- 【译】VisualStudio 17.9预览3带来了令人兴奋的代码搜索改变
随着 VisualStudio17.9预览版3的发布,我们为代码搜索(也称为 All-In-One Search)带来了一些令人兴奋的增强.自从我们上次更新搜索体验以来,我们一直在努力改进体验,并想出 ...
- 3.操作列表--《Python编程:从入门到实践》
3.1 遍历列表 magicians = ['alice', 'david', 'carolina'] for magician in magicians: # 临时变量 magician print ...
- Trino-登录WebUI页面报错,日志中提示:404 Not Foud. (Zookeeper占用8080端口,与Trino的端口冲突)
问题描述 启动Trino客户端执行show catalogs时报错:Error starting query at http://localhost:8080/v1/statement returne ...
- 开源.NetCore通用工具库Xmtool使用连载 - 散列算法篇
[Github源码] <上一篇>详细介绍了Xmtool工具库中的加解密类库,今天我们继续为大家介绍其中的散列算法类库. 散列算法在某些特殊场景也可以当做加密方法使用:其特点是不可逆,同一内 ...
- APB_AHB_AXI协议的简单介绍
一.AMBA概述 今天要介绍的三种嵌入式总线技术:APB.AHB.AXI,它们都属于AMBA 片上总线协议.所以,在介绍这几种总线技术之前,有必要先了解一下AMBA 片上总线协议是什么. AMBA ( ...
- Linux学习资料锦集
Linux 学习资料链接: (1)Linux常见命令及其用法_STM32李逼的博客-CSDN博客 (2)Linux命令了解_STM32李逼的博客-CSDN博客 3)Linux使用编辑器_STM32李 ...