多任务通信下可能的死锁问题及总结
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,二进制信号量使用说明
二进制信号量是用于互斥还是同步与其初始状态关系密切。互斥操作一般将其初始化为可用,而同步操作则将其初始化为不可用。
http://www.witech.com.cn/news/Article_Show.asp?ArticleID=231
以前遇到死锁问题,仅局限于查找信号量嵌套,总是将死锁局限于多信号量的使用,而往往忽视了最根本的问题,死锁产生的原因在于资源,资源短缺,资源互斥。因为这个原因,在分析死锁时也应该考虑信号量与管道,消息队列之间可能因为争夺资源而导致的阻塞。
然后对信号量做个总结:
1,概述
VxWorks中提供了三种信号量,二进制信号量(semBCreate),互斥信号量(semMCreate),和计数信号量(semCCreate)。那么这三种信号量分别有什么特点呢?
二进制信号量:速度最快,最常用,是完成互斥,同步操作的最佳方式;
互斥信号量:对二进制信号量在互斥上进行优化,具有优先级继承,删除保护和递归访问的特性;
计数信号量:可记录semGive()的次数,可监视同一资源上的多个实例。
信号量操作的常用函数:
semTake();
semGive();
semFlush();将所有等待该信号量的任务唤醒;但并不会影响该二进制信号量所处的状态,它只是清空了所有阻塞在该信号量上的任务队列。
中断服务程序不能调用semGive函数。
2,二进制信号量使用说明
二进制信号量是用于互斥还是同步与其初始状态关系密切。互斥操作一般将其初始化为可用,而同步操作则将其初始化为不可用。
相关文章推荐
- HBase 异步查询导致的死锁和zookeeper通信中断问题追踪与总结[非技术]
- 基于FPGA的串口通信调试问题总结
- Flash XMLSocket 通信问题总结
- 未将对象引用设置到对象的实例--可能出现的问题总结
- Java总结(十)—实现Runnable接口创建线程,线程安全同步,死锁(哲学家进餐问题),读写锁
- Socket 通信中由 read 返回值造成的的死锁问题(socket 阻塞)
- 使用OJ评判C/C++程序可能出现的问题总结
- 未将对象引用设置到对象的实例--可能出现的问题总结
- 用户行为日志-js埋点(四)可能存在的问题和总结
- Java第十二次作业:继承与抽象类解决工人与学生的问题,抽象类实例。抽象类作用——为多态创造了可能。抽象类的作用总结
- JavaSE第一百零四讲:哲学家就餐问题、死锁与使用wait及notify方法实现线程之间的相互通信
- Java Socket通信介绍及可能遇到的问题解决
- AutoMake系列之四,可能遇到的问题总结
- 未将对象引用设置到对象的实例--可能出现的问题总结
- 有关socket通信包大小的问题总结(UDP传输模式)
- 【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)
- IOS shareSDK三方登录(集成过程)+(可能问题)总结
- 近距离通信技术存在的安全问题总结
- C++技术问题总结-第2篇 进程通信
- c#:未将对象引用设置到对象的实例--可能出现的问题总结(转)