信号量导致优先级翻转的问题(以linux和RT-Thread为例)

本文探讨了在使用RT-Thread时遇到的信号量导致的优先级翻转问题,并对比分析了Linux内核4.15版本中信号量的实现机制。通过深入研究Linux的task_struct结构体,确认Linux系统采用优先级继承或优先级天花板机制,有效避免了优先级翻转,确保多线程环境下信号量的安全使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

          今天在公司使用RT-Thread时发现它的信号量会导致优先级翻转的问题。所以根据官网的提醒,尽可能的使用互斥量。

          因为下一个项目是linux的肯定会用到多线程,所以赶紧分析下是否linux的信号量会出现这个问题吗?

          打开我用的linux版本linux-4.15中的linux-4.15\linux-4.15\kernel\locking\semaphore.c看到了如下的代码

/* Functions for the contended case */

struct semaphore_waiter {
	struct list_head list;
	struct task_struct *task;
	bool up;
};

        struct task_struct *task;指向进入临界区的进程。然后我们看看到include\linux\sched.h中看task_struct的结构体其中有

struct task_struct {    
    ...
    int				prio;
	int				static_prio;
	int				normal_prio;
	unsigned int			rt_priority;
    ...
}

     说明在linux下应该是有用优先级继承或优先级天花板的,所以可以放心使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值