非抢占系统中,必须程序中主动放权或任务挂起,其他任务才得以调度。
基于此,我们在非抢占系统中编写自己的任务需要注意一下几点:
- 及时放权,使其他任务得到调度;队列调用时,可以选择读取指定数目消息后,进行放权;
- 避免任务中出现大循环,使得任务长时间占用cpu资源,饿死其他任务;
- 放权过程需要程序开发者自己设计,需要注意调用栈中指针的保护,尽量在较外层的函数中进行放权;经常在项目实践中出现隐性放权(调用一个会放权的函数),此时需要特别注意,调用该函数后,前面从链表中获取的节点必须重新获取一次,因为此时其他任务很有可能已经把前面指针指向的节点释放了,该指针已成野指针。