多任務通信下可能的死鎖問題及總結

    首先介紹一篇VxWorks下多任務通信機制的文章:

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

 

    以前遇到死鎖問題,僅侷限於查找信號量嵌套,總是將死鎖侷限於多信號量的使用,而往往忽視了最根本的問題,死鎖產生的原因在於資源,資源短缺,資源互斥。因爲這個原因,在分析死鎖時也應該考慮信號量與管道,消息隊列之間可能因爲爭奪資源而導致的阻塞。

 

    然後對信號量做個總結:

1,概述

    VxWorks中提供了三種信號量,二進制信號量(semBCreate),互斥信號量(semMCreate),和計數信號量(semCCreate)。那麼這三種信號量分別有什麼特點呢?

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

    互斥信號量:對二進制信號量在互斥上進行優化,具有優先級繼承,刪除保護和遞歸訪問的特性;

    計數信號量:可記錄semGive()的次數,可監視同一資源上的多個實例。

 

    信號量操作的常用函數:

    semTake();

    semGive();

    semFlush();將所有等待該信號量的任務喚醒;但並不會影響該二進制信號量所處的狀態,它只是清空了所有阻塞在該信號量上的任務隊列。

   

    中斷服務程序不能調用semGive函數。

 

2,二進制信號量使用說明

    二進制信號量是用於互斥還是同步與其初始狀態關係密切。互斥操作一般將其初始化爲可用,而同步操作則將其初始化爲不可用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章