
互斥量在逻辑上与二值信号量作用一致,但在实现过程中通过优先级继承这一方法解决的二值信号量优先级翻转的问题。
使用方法
static rt_mutex_t test_mutex = RT_NULL;
test_mutex = rt_mutex_create("test_mutex", //互斥量名
RT_IPC_FLAG_PRIO); //操作互斥量方式
if (test_mutex != RT_NULL) //监测互斥量初始化是否成功
{
rt_kprintf("互斥量初始化成功!");
}
//一般在线程入口函数中对互斥量进行操作
void thread_entry(void* parameter)
{
dosomething();
rt_err_t uwRet = RT_EOK;
uwRet = rt_mutex_take(test_mutex, RT_WAITING_FOREVER);
if (uwRet == RT_EOK)
rt_kprintf("获取互斥量成功!");
dosomething();
uwRet = rt_mutex_release(test_mutex);
}
优先级继承
还是假设High、Middle和Low三个优先级的线程,High和Low通过互斥量Mutex1进行通讯,Middle和Low通过互斥量Mutex2进行通讯。Low首先获得Mutex1后再与Middle竞争Mutex2,此时通过优先级继承机制,Low的优先级提高到与High相同,所以Low会优先获得Mutex2,进而快速执行完毕释放Mutex1,以达到提高程序实时性的目的。




近期评论