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