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

来源:互联网 发布:js jsonarray 长度 编辑:程序博客网 时间:2024/06/08 18:34

    首先介绍一篇VxWorks下多任务通信机制的文章:

http://www.witech.com.cn/news/Article_Show.asp?ArticleID=231

 

    以前遇到死锁问题,仅局限于查找信号量嵌套,总是将死锁局限于多信号量的使用,而往往忽视了最根本的问题,死锁产生的原因在于资源,资源短缺,资源互斥。因为这个原因,在分析死锁时也应该考虑信号量与管道,消息队列之间可能因为争夺资源而导致的阻塞。

 

    然后对信号量做个总结:

1,概述

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

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

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

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

 

    信号量操作的常用函数:

    semTake();

    semGive();

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

   

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

 

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

    二进制信号量是用于互斥还是同步与其初始状态关系密切。互斥操作一般将其初始化为可用,而同步操作则将其初始化为不可用。