0420
来源:互联网 发布:手工香皂洗脸好吗 知乎 编辑:程序博客网 时间:2024/05/23 20:51
使用一个消息队列作为计数信号量
- 在消息队列初始化时,可以将消息队列中的多个指针设为非NULL值(如void* 1),来实现计数信号量的功能。这里,初始化为非NULL值的指针数就是可用的资源数。系统中的任务可以通过OSQPend()来请求“信号量”,然后通过调用OSQPost()来释放“信号量”,如程序清单 L6.28。如果系统中只使用了计数信号量和消息队列,使用这种方法可以有效地节省代码空间。这时将OS_SEM_EN设为0,就可以不使用信号量,而只使用消息队列。值得注意的是,这种方法为共享资源引入了大量的指针变量。也就是说,为了节省代码空间,牺牲了RAM空间。另外,对消息队列的操作要比对信号量的操作慢,因此,当用计数信号量同步的信号量很多时,这种方法的效率是非常低的。
- 程序清单 L6.28 使用消息队列作为一个计数信号量
- OS_EVENT *QSem;
- void *QMsgTbl[N_RESOURCES]
- void main (void)
- {
- OSInit();
- . .
- QSem = OSQCreate(&QMsgTbl[0], N_RESOURCES);
- for (i = 0; i < N_RESOURCES; i++) {
- OSQPost(Qsem, (void *)1);
- }
- .
- .
- OSTaskCreate(Task1, .., .., ..);
- .
- .
- OSStart();
- }
- void Task1 (void *pdata)
- {
- INT8U err;
- for (;;) {
- OSQPend(&QSem, 0, &err); /* 得到对资源的访问权 */
- .
- . /* 任务获得信号量,对资源进行访问 */
- .
- OSMQPost(QSem, (void*)1); /* 释放对资源的访问权 */
- }
- }
0 0
- 0420
- 0420(mysql学习资料)
- Python Learn 0420
- JavaScript 学习笔记 0420
- 0420-并集选择器
- 0420- 兄弟选择器
- 0420-序选择器
- 0420工作流出现的问题
- iOS开源项目周报0420
- 一周海外安全事件回顾(20140414-0420)
- 0420 测试记录 gcc 编译时 库文件 头文件问题及其解决方案
- seandroid 中app权限设置
- 很详细的网络请求
- 题目1184:二叉树遍历
- CDN
- cardView的使用
- 0420
- Phishing with Unicode Domains
- 图片选择器(兼容6.0及7.0版本)
- 基于DragonBoard 410c的远程家居监控平台五之客户端显示(中)
- Spring xml中使用file:协议配置路径
- hive优化
- Css学习笔记
- Oracle表空间释放与增加表空间大小
- 17.4.20 漫画与人脸识别(三)Matching caricatures to photographs 小感