專利名稱:VxWorks多任務同步與通信方法
技術領域:
本發明涉及VxWorks操作系統技術領域,尤其涉及一種VxWorks多任務同步與通
信方法。
背景技術:
VxWorks操作系統是一種嵌入式實時操作系統,允許多任務的同時運行。當多任務 同時運行時,任務之間的同步與通信是非常必要的。共享數據是VxWorks操作系統實現多任務同步與通信的途徑之一。采用共享數據 時,通常采用VxWorks提供的信號量來保證共享數據的互斥訪問,但當相互之間需要同步 與通信的任務比較多時,共享數據互斥訪問的算法會很復雜,加大了多任務協作的難度。此外,VxWorks操作系統還提供了消息隊列的方式來允許任務之間相互發送消息, 任何任務都可以發送消息到消息隊列和從消息隊列接收消息,來實現相互間的同步與通 信。但是,由于兩個任務間全雙工地通信一般需要兩個消息隊列,每個提供一個流通方向, 因此當相互之間需要同步與通信的任務比較多時,消息隊列的數量會變得很大,對消息隊 列的管理也會變得很復雜,加大了多任務協作的難度。
發明內容
有鑒于此,本發明提供一種VxWorks多任務同步與通信方法,以解決現有技術中, 當相互之間需要同步與通信的任務比較多時,由于共享數據互斥訪問的算法很復雜或消息 隊列的數量很大,所造成的多任務協作難度大的問題,技術方案如下一種VxWorks多任務同步與通信方法,包括創建MTLInitialize對象對多任務運行環境進行初始化;創建MTLThread對象將對多任務的操作進行封裝;創建MTLMutex對象和MTLRecursiveMutex對象對信號量進行封裝,創建 MTLMonitor對象對消息隊列進行封裝,創建MTLSynchronized對象對信號量和消息隊列進 行統一管理,為用戶提供統一的接口和用法;利用所述統一的接口和用法實現多任務的同步與通信。優選的,上述方法中,所述對多任務的操作包括任務創建、任務運行、任務暫停和任務銷毀。優選的,上述方法中,所述創建MTLMutex對象對信號量進行封裝包括在MTLMutex的構造函數中創建信號量,在MTLMutex的析構函數中刪除信號量,在 MTLMutex的lock函數中獲取信號量,在MTLMutex的unlock函數中釋放信號量。優選的,上述方法中,所述創建MTLRecursiveMutex對象對信號量進行封裝包括在 MTLRecursiveMutex 的構造函數中創建信號量,在 MTLRecursiveMutex 的析構函數中刪除信號量,在MTLRecursiveMutex的lock函數中獲取信號量,在 MTLRecursiveMutex的unlock函數中釋放信號量。
優選的,上述方法中,所述創建MTLMonitor對象對消息隊列進行封裝包括在MTLMonitor的構造函數中創建消息隊列,在MTLMonitor的析構函數中刪除消 息隊列,在MTLMonitor的wait函數中從消息隊列獲取消息,在MTLMonitor的notify函數 中向消息隊列發送消息。優選的,上述方法中,所述創建MTLSynchronized對象對信號量和消息隊列進行 統一管理,為用戶提供統一的接口和用法包括在MTLSynchronized的構造函數中獲取信號量和/或從消息隊列中獲取消 息,在MTLSynchronized的析構函數中釋放信號量和/或向消息隊列中發消息,在 MTLSynchronized的成員函數中實現對信號量或消息隊列的其它操作。優選的,上述方法中,所述利用所述統一的接口和用法實現多任務的同步與通信 包括通過調用MTLMutex和MTLRecursiveMutex類的lock和unlock函數進行多任務 之間的同步;通過調用MTLMonitor類的wait和notify函數實現多任務之間的通信;通過定義MTLSynchronized類對象實現多任務的同步與通信。優選的,上述方法中,所述通過定義MTLSynchronized類對象實現多任務的同步 與通信包括MTLSynchronized的構造函數調用其成員變量MTLMonitor類對象的wait函數以 及MTLMutex和MTLRecursiveMutex類對象的lock函數,獲取信號量或從消息隊列中獲取 消息;MTLSynchronized的析構函數中調用其成員變量MTLMonitor類對象的notify函 數以及MTLMutex和MTLRecursiveMutex類對象的unlock函數,釋放信號量和向消息隊列 發送消息;MTLSynchronized的成員函數實現對信號量和消息隊列的其它操作。通過以上技術方案可知,本發明通過將VxWorks的信號量和消息隊列封裝成 多任務庫,即創建MTLMutex對象和MTLRecursiveMutex對象對信號量進行封裝,創建 MTLMonitor對象對消息隊列進行封裝,創建MTLSynchronized對象對信號量和消息隊列進 行統一管理,為用戶提供統一的接口和用法;從而使用戶僅通過創建和使用C++對象的方 法即可對多任務進行同步和通信控制,大大降低了多任務協作的難度。
為了更清楚地說明本發明的技術方案,下面將對本發明描述中所需要使用的附圖 作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普 通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。圖1為本發明實施例提供的VxWorks多任務同步與通信方法流程圖。
具體實施例方式本發明實施例針對現有技術存在的多任務協作的難度大的問題,提出了一種 多任務同步與通信方法,該方法包括創建MTLInitialize對象對多任務運行環境進行初始化;創建MTLThread對象將對多任務的操作進行封裝;創建MTLMutex對象和 MTLRecursiveMutex對象對信號量進行封裝,創建MTLMonitor對象對消息隊列進行封裝, 創建MTLSynchronized對象對信號量和消息隊列進行統一管理,為用戶提供統一的接口和 用法;利用所述統一的接口和用法實現多任務的同步與通信。本發明實施例提供的多任務同步與通信方法,利用C++類封裝的方法對VxWorks 的消息隊列和信號量進行封裝,將消息隊列和信號量與一定的數據結構相結合,使用戶通 過定義C++類對象的方法來創建、使用和銷毀消息隊列與信號量,通過調用對象的方法來 與其它任務通信,從而輕松地實現多任務之間的同步和通信,大大降低了多任務協作的難度。為了使本領域技術人員更好的理解和實施本發明,下面將結合說明書附圖對本發 明實施例的技術方案進行進一步詳細闡述。參見圖1所示,本發明實施例提供的VxWorks多任務同步與通信方法可以包括以 下步驟S101,創建MTLInitialize對象對多任務運行環境進行初始化。使用多任務庫之前,必須創建MTLInitialize對象,對VxWorks操作系統的多任務 運行環境進行初始化。MTLInitialize類的構造函數會進行任務私有變量的分配、創建任務 管理類等初始化操作,通過創建MTLInitialize對象即可進行多任務運行環境的創建。S102,創建MTLThread對象將對多任務的操作進行封裝。通過創建MTLThread對象可以實現對多任務的操作進行封裝,對多任務的操作 包括任務創建、任務運行、任務暫停和任務銷毀。其中,MTLThread類的構造函數會進行 VxWorks操作系統新任務的創建;通過從MTLThread類派生子類、再重載MTLThread類的 start等方法即可運行和控制新任務。S103,創建MTLMutex對象和MTLRecursiveMutex對象對信號量進行封裝,創建 MTLMonitor對象對消息隊列進行封裝,創建MTLSynchronized對象對信號量和消息隊列進 行統一管理,為用戶提供統一的接口和用法。MTLMutex 和 MTLRecursiveMutex 類對 VxWorks 的信號量進行了封裝,MTLMonitor 類對VxWorks的消息隊列進行了封裝,這三個類都是MTLSynchronized類的成員變量, MTLSynchronized類負責對信號量和消息隊列進行統一管理,為用戶提供統一的接口和用法。需要說明的是,所述創建MTLMutex對象對信號量進行封裝包括在MTLMutex的構造函數中創建信號量,在MTLMutex的析構函數中刪除信號量,在 MTLMutex的lock函數中獲取信號量,在MTLMutex的unlock函數中釋放信號量。所述創建MTLRecursiveMutex對象對信號量進行封裝包括在 MTLRecursiveMutex 的構造函數中創建信號量,在 MTLRecursiveMutex 的析構函數中刪除信號量,在MTLRecursiveMutex的lock函數中獲取信號量,在 MTLRecursiveMutex的unlock函數中釋放信號量。所述創建MTLMonitor對象對消息隊列進行封裝包括在MTLMonitor的構造函數中創建消息隊列,在MTLMonitor的析構函數中刪除消 息隊列,在MTLMonitor的wait函數中從消息隊列獲取消息,在MTLMonitor的notify函數
6中向消息隊列發送消息。 所述創建MTLSynchronized對象對信號量和消息隊列進行統一管理,為用戶提供 統一的接口和用法包括在MTLSynchronized的構造函數中獲取信號量和/或從消息隊列中獲取消息,在 MTLSynchronized的析構函數中釋放信號量和/或向消息隊列中發消息,在MTLSynchronized的成員函數中實現對信號量或消息隊列的其它操作。由于信號量可實現多任務之間的同步和對資源的互斥訪問,消息隊列可提供多任 務之間更高級別的通信與數據傳送,因此這種統一封裝的方式可實現絕大多數情況下的多 任務之間的同步與通信處理,且符合面向對象的封裝思想。S104,利用所述統一的接口和用法實現多任務的同步與通信。在多任務庫構造完成之后,用戶就可以利用統一的接口和用法來實現多任務的同 步與通信。由于MTLMutex和MTLRecursiveMutex類對信號量進行了封裝,用戶通過調用其 lock和unlock等成員函數即可在多任務之間進行同步;MTLMonitor類對消息隊列進行了 封裝,用戶通過調用其wait和notify等成員函數即可在多任務之間進行通信;此外,還通 過定義MTLSynchronized類對象實現多任務的同步與通信。其中,通過定義MTLSynchronized類對象實現多任務的同步與通信可以包括MTLSynchronized類的構造函數調用其成員變量MTLMonitor類對象的wait函數 以及MTLMutex和MTLRecursiveMutex類對象的lock函數,獲取信號量或從消息隊列中獲 取消息;MTLSynchronized類的析構函數中調用其成員變量MTLMonitor類對象的notify 函數以及MTLMutex和MTLRecursiveMutex類對象的unlock函數,釋放信號量和向消息隊 列發送消息;MTLSynchronized的成員函數實現對信號量和消息隊列的其它操作。從以上實施例可以看出,本發明通過將VxWorks的信號量和消息隊列封裝成 多任務庫,即創建MTLMutex對象和MTLRecursiveMutex對象對信號量進行封裝,創建 MTLMonitor對象對消息隊列進行封裝,創建MTLSynchronized對象對信號量和消息隊列進 行統一管理,為用戶提供統一的接口和用法;從而使用戶僅通過創建和使用C++對象的方 法即可對多任務進行同步和通信控制,大大降低了多任務協作的難度。此外,本發明通過采用VxWorks多任務庫,在保證功能實現的前提下,使得多任務 的同步和通信控制變得非常簡單,大大提高了 VxWorks程序的健壯性,有利于縮短項目周 期,提高軟件質量。通過以上的方法實施例的描述,所屬領域的技術人員可以清楚地了解到本發明可 借助軟件加必需的通用硬件平臺的方式來實現,當然也可以通過硬件,但很多情況下前者 是更佳的實施方式。基于這樣的理解,本發明的技術方案本質上或者說對現有技術做出貢 獻的部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質中,包 括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執 行本發明各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括只讀存儲器 (ROM)、隨機存取存儲器(RAM)、磁碟或者光盤等各種可以存儲程序代碼的介質。對所公開的實施例的上述說明,使本領域專業技術人員能夠實現或使用本發明。 對這些實施例的多種修改對本領域的專業技術人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發明的精神或范圍的情況下,在其它實施例中實現。因此,本發明 將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新 穎特點相一 致的最寬的范圍。
權利要求
一種VxWorks多任務同步與通信方法,其特征在于,包括創建MTLInitialize對象對多任務運行環境進行初始化;創建MTLThread對象將對多任務的操作進行封裝;創建MTLMutex對象和MTLRecursiveMutex對象對信號量進行封裝,創建MTLMonitor對象對消息隊列進行封裝,創建MTLSynchronized對象對信號量和消息隊列進行統一管理,為用戶提供統一的接口和用法;利用所述統一的接口和用法實現多任務的同步與通信。
2.根據權利要求1所述的方法,其特征在于,所述對多任務的操作包括任務創建、任務運行、任務暫停和任務銷毀。
3.根據權利要求1所述的方法,其特征在于,所述創建MTLMutex對象對信號量進行封 裝包括在MTLMutex的構造函數中創建信號量,在MTLMutex的析構函數中刪除信號量,在 MTLMutex的lock函數中獲取信號量,在MTLMutex的unlock函數中釋放信號量。
4.根據權利要求1所述的方法,其特征在于,所述創建MTLRecursiveMutex對象對信號 量進行封裝包括在MTLRecursiveMutex的構造函數中創建信號量,在MTLRecursiveMutex的析構函數 中刪除信號量,在MTLRecursiveMutex的lock函數中獲取信號量,在MTLRecursiveMutex 的unlock函數中釋放信號量。
5.根據權利要求1所述的方法,其特征在于,所述創建MTLMonitor對象對消息隊列進 行封裝包括在MTLMonitor的構造函數中創建消息隊列,在MTLMonitor的析構函數中刪除消息隊 列,在MTLMonitor的wait函數中從消息隊列獲取消息,在MTLMonitor的notify函數中向 消息隊列發送消息。
6.根據權利要求1所述的方法,其特征在于,所述創建MTLSynchronized對象對信號量 和消息隊列進行統一管理,為用戶提供統一的接口和用法包括在MTLSynchronized的構造函數中獲取信號量和/或從消息隊列中獲取消 息,在MTLSynchronized的析構函數中釋放信號量和/或向消息隊列中發消息,在 MTLSynchronized的成員函數中實現對信號量或消息隊列的其它操作。
7.根據權利要求1所述的方法,其特征在于,所述利用所述統一的接口和用法實現多 任務的同步與通信包括通過調用MTLMutex和MTLRecursiveMutex類的lock和unlock函數進行多任務之間 的同步;通過調用MTLMonitor類的wait和notify函數實現多任務之間的通信;通過定義MTLSynchronized類對象實現多任務的同步與通信。
8.根據權利要求7所述的方法,其特征在于,所述通過定義MTLSynchronized類對象實 現多任務的同步與通信包括MTLSynchronized的構造函數調用其成員變量MTLMonitor類對象的wait函數以及 MTLMutex和MTLRecursiveMutex類對象的lock函數,獲取信號量或從消息隊列中獲取消 息;MTLSynchronized的析構函數中調用其成員變量MTLMonitor類對象的notify函數以 及MTLMutex和MTLRecursiveMutex類對象的unlock函數,釋放信號量和向消息隊列發送 消息;MTLSynchronized的成員函數實現對信號量和消息隊列的其它操作。
全文摘要
本發明公開了一種VxWorks多任務同步與通信方法,包括創建MTLInitialize對象對多任務運行環境進行初始化;創建MTLThread對象將對多任務的操作進行封裝;創建MTLMutex對象和MTLRecursiveMutex對象對信號量進行封裝,創建MTLMonitor對象對消息隊列進行封裝,創建MTLSynchronized對象對信號量和消息隊列進行統一管理,為用戶提供統一的接口和用法;利用所述統一的接口和用法實現多任務的同步與通信。本發明利用C++類封裝的方法對VxWorks的消息隊列和信號量進行封裝,輕松地實現多任務之間的同步和通信,大大降低了多任務協作的難度。
文檔編號G06F9/52GK101872317SQ201010230519
公開日2010年10月27日 申請日期2010年7月16日 優先權日2010年7月16日
發明者劉江寧, 王凱 申請人:山東中創軟件工程股份有限公司;山東中創軟件商用中間件股份有限公司