互斥信号量的原理与创建

1 互斥信号量的原理与创建

1.1 问题概述

问题:如何处理多个任务共享资源冲突的问题?
在这里插入图片描述
使用计数信号量存在的不足:
在这里插入图片描述
优先级反转现象:

在这里插入图片描述

1.2 设计原理

在这里插入图片描述
锁定计数器:
在这里插入图片描述
优先级继承:
在这里插入图片描述

1.3 设计实现

定义互斥信号结构:
在这里插入图片描述
互斥信号量的初始化:

/**********************************************************************************************************
** Function name        :   tMutexInit
** Descriptions         :   初始化互斥信号量
** parameters           :   mutex 等待初始化的互斥信号量
** Returned value       :   无
***********************************************************************************************************/
void tMutexInit (tMutex * mutex)
{
    tEventInit(&mutex->event, tEventTypeMutex);

    mutex->lockedCount = 0;
    mutex->owner = (tTask *)0;
    mutex->ownerOriginalPrio = TINYOS_PRO_COUNT;
}

参考资料:

  1. 【李述铜】从0到1自己动手写嵌入式操作系统
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
uC/OSIII是一个实时操作系统,它提供了多任务、时间管理、内存管理、通信等基础功能。在uC/OSIII中,互斥信号量是一种常用的同步机制,用于协调多个任务对共享资源的访问。下面是互斥信号量实验的原理和方法: 实验原理互斥信号量是一种二进制信号量,它的值只能为0或1。当互斥信号量的值为1时,表示共享资源已被占用;当互斥信号量的值为0时,表示共享资源未被占用。当一个任务想要访问共享资源时,它需要首先获取互斥信号量。如果互斥信号量的值为1,表示共享资源已被占用,此时任务需要等待;如果互斥信号量的值为0,表示共享资源未被占用,此时任务可以获取互斥信号量并访问共享资源。当任务访问完共享资源后,需要释放互斥信号量,以便其他任务可以访问共享资源。 实验方法: 1. 在uC/OSIII中创建两个任务,分别用于访问共享资源和输出信息。 2. 定义一个互斥信号量,用于协调两个任务对共享资源的访问。 3. 在任务中使用OSMutexPend函数获取互斥信号量,如果获取成功,表示共享资源未被占用,可以访问共享资源;如果获取失败,表示共享资源已被占用,需要等待。 4. 在任务中使用OSMutexPost函数释放互斥信号量。 5. 在主函数中创建任务和互斥信号量,并启动uC/OSIII内核。 6. 观察两个任务的输出,检查互斥信号量是否起到了协调访问的作用。 需要注意的是,在实际应用中,互斥信号量的使用需要考虑许多细节,如优先级反转、死锁等问题。因此,在设计和实现互斥信号量时,需要仔细考虑各种情况,并进行充分的测试和验证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值