您的位置:首页 > 其它

多任务通信下可能的死锁问题及总结

2010-03-01 14:44 363 查看
首先介绍一篇VxWorks下多任务通信机制的文章:
http://www.witech.com.cn/news/Article_Show.asp?ArticleID=231
以前遇到死锁问题,仅局限于查找信号量嵌套,总是将死锁局限于多信号量的使用,而往往忽视了最根本的问题,死锁产生的原因在于资源,资源短缺,资源互斥。因为这个原因,在分析死锁时也应该考虑信号量与管道,消息队列之间可能因为争夺资源而导致的阻塞。

然后对信号量做个总结:

1,概述

VxWorks中提供了三种信号量,二进制信号量(semBCreate),互斥信号量(semMCreate),和计数信号量(semCCreate)。那么这三种信号量分别有什么特点呢?

二进制信号量:速度最快,最常用,是完成互斥,同步操作的最佳方式;

互斥信号量:对二进制信号量在互斥上进行优化,具有优先级继承,删除保护和递归访问的特性;

计数信号量:可记录semGive()的次数,可监视同一资源上的多个实例。

信号量操作的常用函数:

semTake();

semGive();

semFlush();将所有等待该信号量的任务唤醒;但并不会影响该二进制信号量所处的状态,它只是清空了所有阻塞在该信号量上的任务队列。

中断服务程序不能调用semGive函数。

2,二进制信号量使用说明

二进制信号量是用于互斥还是同步与其初始状态关系密切。互斥操作一般将其初始化为可用,而同步操作则将其初始化为不可用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐