信号量嵌入式操作系统内核原理和开发
作者:网络转载 发布时间:[ 2012/9/14 10:16:06 ] 推荐标签:
有了上面的讲解,我们发现os的代码其实也没有那么恐怖。所以,请大家一鼓作气,看看信号量是怎么删除的吧:
RAW_U16 raw_semaphore_delete(RAW_SEMAPHORE *semaphore_ptr)
#if (RAW_SEMA_FUNCTION_CHECK > 0)
block_list_head = &semaphore_ptr->common_block_obj.block_list;
/*All task blocked on this queue is waken up*/
RAW_CRITICAL_EXIT();
#if (RAW_SEMA_FUNCTION_CHECK > 0)
block_list_head = &semaphore_ptr->common_block_obj.block_list;
/*All task blocked on this queue is waken up*/
RAW_CRITICAL_EXIT(); } |
信号量删除的工作其实很少,也很简单,同样我们也来梳理一下
(1)判断参数合法性;
(2)唤醒阻塞队列中的每一个线程;
(3)调用系统调度函数,因为高优先级的任务很有可能刚刚从阻塞队列中释放出来;
(4)当前线程再次运行,函数返回。
通过上面几个函数的讲解,我们发现关于os互斥部分的代码其实也不复杂。只要对系统本身和中断有一些了解,其实代码都是可以看懂的。当然,上面的代码我们还是讲的比较粗糙,所以有些细节还是要补充一下,
(1)多线程共享的函数必须在关中断的情况下进行操作,当然多核的时候关中断也不好使了;
(2)实时系统的抢占是每时每刻都在进行的,比如中断返回时、信号量释放时、调用延时函数、调用调度函数的时候,所以大家心中要有抢占的概念;
(3)互斥函数中大量使用了链表的结构,建议大家好好掌握链表的相关算法;
(4)关于os的代码一定要多看、多思考、多练习才会有进步和提高,纸上得来终觉浅、绝知此事要躬行。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11