亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)方法及系統(tǒng)的制作方法

文檔序號(hào):6436487閱讀:223來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):一種多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)通信領(lǐng)域,尤其涉及一種多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)方法及系統(tǒng)。
背景技術(shù)
在嵌入式系統(tǒng)的應(yīng)用中,往往會(huì)遇到有大量實(shí)時(shí)數(shù)據(jù)需要送到不同程序由不同的客戶(hù)端進(jìn)行處理的情況,此時(shí)還要求數(shù)據(jù)分發(fā)過(guò)程中每個(gè)處理進(jìn)程在所需數(shù)據(jù)丟失時(shí),能夠得到通知并知道所丟失的數(shù)據(jù)數(shù)量。但是,這些數(shù)據(jù)本身通常產(chǎn)生的速率較高,相對(duì)于嵌入式系統(tǒng)有限的內(nèi)存來(lái)說(shuō),占用的內(nèi)存空間較為可觀,而大量數(shù)據(jù)在進(jìn)程間交換時(shí),通常采用高效的共享內(nèi)存機(jī)制。但是,在應(yīng)用上述共享內(nèi)存機(jī)制時(shí),發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下問(wèn)題共享內(nèi)存在多個(gè)進(jìn)程同時(shí)訪(fǎng)問(wèn)時(shí),缺乏同步機(jī)制,容易造成共享數(shù)據(jù)的紊亂,使得共享內(nèi)存中數(shù)據(jù)與源數(shù)據(jù)不再一致。同時(shí),共享內(nèi)存采用無(wú)格式數(shù)據(jù),不便于數(shù)據(jù)的處理。

發(fā)明內(nèi)容
本發(fā)明的實(shí)施例提供一種多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)方法及系統(tǒng),以便提高Linux 系統(tǒng)中的數(shù)據(jù)處理效率。為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案一種多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)方法,包括分發(fā)模塊從數(shù)據(jù)源處獲取數(shù)據(jù);分發(fā)模塊根據(jù)作為消費(fèi)者的各客戶(hù)端模塊已注冊(cè)的數(shù)據(jù)類(lèi)型和客戶(hù)端特性信息將所述數(shù)據(jù)寫(xiě)入到共享內(nèi)存;所述分發(fā)模塊根據(jù)所述已注冊(cè)的數(shù)據(jù)類(lèi)型和客戶(hù)端特性信息通知所述作為消費(fèi)者的各客戶(hù)端模塊來(lái)讀取所述共享內(nèi)存中的數(shù)據(jù)。進(jìn)一步,上述方法還可還包括所述分發(fā)模塊在任務(wù)啟動(dòng)時(shí),鏈接到已創(chuàng)建的用于為所述作為消費(fèi)者的各客戶(hù)端模塊存儲(chǔ)數(shù)據(jù)的共享內(nèi)存上;向數(shù)據(jù)結(jié)構(gòu)注冊(cè)自己的數(shù)據(jù)類(lèi)型和特性信息,其中,所述特性信息至少包括分發(fā)模塊ID和數(shù)據(jù)寫(xiě)入共享內(nèi)存的寫(xiě)入方式;根據(jù)分發(fā)模塊ID創(chuàng)建與自身相對(duì)應(yīng)的消息隊(duì)列,并根據(jù)各客戶(hù)端模塊ID創(chuàng)建與各客戶(hù)端模塊一一對(duì)應(yīng)的消息隊(duì)列;創(chuàng)建用于指示寫(xiě)入的操作鎖;所述作為消費(fèi)者的各客戶(hù)端模塊在其任務(wù)啟動(dòng)時(shí),鏈接到已創(chuàng)建的用于為其存儲(chǔ)數(shù)據(jù)的共享內(nèi)存上;向數(shù)據(jù)結(jié)構(gòu)注冊(cè)用于指示分發(fā)模塊通知作為消費(fèi)者的客戶(hù)端模塊讀取所述共享內(nèi)存中的數(shù)據(jù)的信息和客戶(hù)端特性信息,其中,客戶(hù)端特性信息至少包括所述客戶(hù)端模塊ID和從共享內(nèi)存中讀取數(shù)據(jù)的讀取方式;每個(gè)作為消費(fèi)者的客戶(hù)端模塊均根據(jù)分發(fā)模塊ID創(chuàng)建與分發(fā)模塊相對(duì)應(yīng)的消息隊(duì)列,并根據(jù)自身的客戶(hù)端模塊ID創(chuàng)建與自身相對(duì)應(yīng)的消息隊(duì)列,以及根據(jù)其他客戶(hù)端模塊ID創(chuàng)建與其他客戶(hù)端模塊一一對(duì)應(yīng)的消息隊(duì)列;創(chuàng)建所述用于指示讀取的操作鎖。
進(jìn)一步,該方法還可包括所述分發(fā)模塊在所述寫(xiě)入之前,將所述用于指示寫(xiě)入的操作鎖指示為寫(xiě)鎖,代表在寫(xiě)入所述共享內(nèi)存的過(guò)程不接收其他訪(fǎng)問(wèn);所述分發(fā)模塊在通知所述作為消費(fèi)者的各客戶(hù)端模塊來(lái)讀取所述共享內(nèi)存中的數(shù)據(jù)之后,將所述用于指示寫(xiě)入的操作鎖指示為解寫(xiě)鎖。相應(yīng)地,該方法還可包括對(duì)于每個(gè)所述作為消費(fèi)者的客戶(hù)端模塊,在接收到所述分發(fā)模塊的所述通知后, 將所述用于指示讀取的操作鎖指示為讀鎖,代表在讀取所述共享內(nèi)存的過(guò)程中允許讀訪(fǎng)問(wèn),但拒絕寫(xiě)訪(fǎng)問(wèn),并開(kāi)始讀取所述共享內(nèi)存中的數(shù)據(jù);每個(gè)所述作為消費(fèi)者的客戶(hù)端模塊,在讀取完所述共享內(nèi)存中的數(shù)據(jù)后,將所述用于指示讀取的操作鎖指示為解讀鎖。其中,所述開(kāi)始讀取所述共享內(nèi)存中的數(shù)據(jù)具體為每個(gè)所述作為消費(fèi)者的客戶(hù)端模塊根據(jù)注冊(cè)時(shí)的讀取方式開(kāi)始讀取所述共享內(nèi)存中的數(shù)據(jù),所述讀取方式包括先寫(xiě)入先讀取方式,后寫(xiě)入先讀取方式,以及同時(shí)讀取多個(gè)數(shù)據(jù)的方式。特別地,該方法還包括每個(gè)所述作為消費(fèi)者的客戶(hù)端模塊在每次讀取完所述共享內(nèi)存中的數(shù)據(jù)后,通過(guò)置所述共享內(nèi)存中的一個(gè)標(biāo)識(shí)位的方式通知所述分發(fā)模塊是否繼續(xù)向所述作為消費(fèi)者的各客戶(hù)端模塊的消息隊(duì)列發(fā)送讀取共享內(nèi)存的通知。一種多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)系統(tǒng),包括分發(fā)模塊,和至少一個(gè)客戶(hù)端模塊;其中,所述至少一個(gè)客戶(hù)端模塊至少可成為作為消費(fèi)者的客戶(hù)端模塊;所述分發(fā)模塊,用于根據(jù)所述作為消費(fèi)者的客戶(hù)端模塊已注冊(cè)的數(shù)據(jù)類(lèi)型和客戶(hù)端特性信息將所述數(shù)據(jù)寫(xiě)入到共享內(nèi)存中;并根據(jù)所述已注冊(cè)的數(shù)據(jù)類(lèi)型和客戶(hù)端特性信息通知所述作為消費(fèi)者的客戶(hù)端模塊來(lái)讀取所述共享內(nèi)存中的數(shù)據(jù);所述作為消費(fèi)者的客戶(hù)端模塊,用于在接收到所述通知后,開(kāi)始讀取所述共享內(nèi)存中的數(shù)據(jù)。進(jìn)一步,所述分發(fā)模塊,還用于在任務(wù)啟動(dòng)時(shí),鏈接到已創(chuàng)建的用于為所述作為消費(fèi)者的各客戶(hù)端模塊存儲(chǔ)數(shù)據(jù)的共享內(nèi)存上;向數(shù)據(jù)結(jié)構(gòu)注冊(cè)自己的數(shù)據(jù)類(lèi)型和特性信息,其中,所述特性信息至少包括分發(fā)模塊ID和數(shù)據(jù)寫(xiě)入共享內(nèi)存的寫(xiě)入方式;根據(jù)分發(fā)模塊ID創(chuàng)建與自身相對(duì)應(yīng)的消息隊(duì)列,并根據(jù)各客戶(hù)端模塊ID創(chuàng)建與各客戶(hù)端模塊一一對(duì)應(yīng)的消息隊(duì)列;創(chuàng)建用于指示寫(xiě)入的操作鎖;每個(gè)所述作為消費(fèi)者的客戶(hù)端模塊,還用于在各自的任務(wù)啟動(dòng)時(shí),鏈接到已創(chuàng)建的用于為其存儲(chǔ)數(shù)據(jù)的共享內(nèi)存上;向數(shù)據(jù)結(jié)構(gòu)注冊(cè)用于指示分發(fā)模塊通知作為消費(fèi)者的客戶(hù)端模塊讀取所述共享內(nèi)存中的數(shù)據(jù)的信息和客戶(hù)端特性信息,其中,客戶(hù)端特性信息至少包括所述客戶(hù)端模塊ID和從共享內(nèi)存中讀取數(shù)據(jù)的讀取方式;每個(gè)作為消費(fèi)者的客戶(hù)端模塊均根據(jù)分發(fā)模塊ID創(chuàng)建與分發(fā)模塊相對(duì)應(yīng)的消息隊(duì)列,并根據(jù)自身的客戶(hù)端模塊ID創(chuàng)建與自身相對(duì)應(yīng)的消息隊(duì)列,以及根據(jù)其他客戶(hù)端模塊ID創(chuàng)建與其他客戶(hù)端模塊一一對(duì)應(yīng)的消息隊(duì)列;創(chuàng)建所述用于指示讀取的操作鎖。進(jìn)一步,所述分發(fā)模塊,還用于在所述寫(xiě)入之前,將所述用于指示寫(xiě)入的操作鎖指示為寫(xiě)鎖,代表在寫(xiě)入所述共享內(nèi)存的過(guò)程不接收其他訪(fǎng)問(wèn);并在通知所述作為消費(fèi)者的客戶(hù)端模塊來(lái)讀取所述共享內(nèi)存中的數(shù)據(jù)之后,將所述用于指示寫(xiě)入的操作鎖指示為解寫(xiě)鎖;每個(gè)所述作為消費(fèi)者的客戶(hù)端模塊,還用于在接收到所述分發(fā)模塊的所述通知后,將所述用于指示讀取的操作鎖指示為讀鎖,代表在讀取所述共享內(nèi)存的過(guò)程中允許讀訪(fǎng)問(wèn),但拒絕寫(xiě)訪(fǎng)問(wèn),并開(kāi)始讀取共享內(nèi)存中的數(shù)據(jù);在讀取完所述共享內(nèi)存中的數(shù)據(jù)后, 將所述用于指示讀取的操作鎖指示為解讀鎖;其中,所述開(kāi)始讀取所述共享內(nèi)存中的數(shù)據(jù)具體為每個(gè)所述作為消費(fèi)者的客戶(hù)端模塊根據(jù)注冊(cè)時(shí)的讀取方式讀取所述共享內(nèi)存中的數(shù)據(jù),所述讀取方式包括先寫(xiě)入先讀取方式,后寫(xiě)入先讀取方式,以及同時(shí)讀取多個(gè)數(shù)據(jù)的方式。特別地,每個(gè)所述作為消費(fèi)者的客戶(hù)端模塊,還用于在每次讀取完所述共享內(nèi)存中的數(shù)據(jù)后,通過(guò)置所述共享內(nèi)存中的一個(gè)標(biāo)識(shí)位的方式通知所述分發(fā)模塊是否向所述作為消費(fèi)者的各客戶(hù)端模塊的消息隊(duì)列發(fā)送讀取共享內(nèi)存的通知。本實(shí)施例提供的上述方案,各客戶(hù)端模塊的任務(wù)進(jìn)程通過(guò)注冊(cè)需要的數(shù)據(jù)類(lèi)型, 在運(yùn)行的過(guò)程中獲取注冊(cè)類(lèi)型的數(shù)據(jù),因此,在客戶(hù)端模塊不需要數(shù)據(jù)時(shí),分發(fā)模塊不再對(duì)數(shù)據(jù)進(jìn)行分發(fā),進(jìn)而節(jié)約資源,提高了數(shù)據(jù)交換的效率。同時(shí),對(duì)于只需要讀取數(shù)據(jù)的模塊, 通過(guò)在讀數(shù)據(jù)時(shí)可與其它客戶(hù)端模塊并發(fā)讀取,提高了共享內(nèi)存數(shù)據(jù)交換的效率。通過(guò)在數(shù)據(jù)交換過(guò)程中的讀鎖,寫(xiě)鎖控制,做到了多個(gè)任務(wù)間的數(shù)據(jù)保護(hù),完成了數(shù)據(jù)同步,并兼顧了數(shù)據(jù)交換效率。另外,所述各客戶(hù)端模塊讀取數(shù)據(jù)時(shí)互不影響,可最大化數(shù)據(jù)交換效率;所述分發(fā)模塊在各客戶(hù)端模塊有數(shù)據(jù)未及時(shí)處理而丟失時(shí),可通知該客戶(hù)端模塊有數(shù)據(jù)丟失,并同時(shí)通知該客戶(hù)端所丟失的數(shù)據(jù)數(shù)量。


圖1為本發(fā)明實(shí)施例一中的各客戶(hù)端模塊間關(guān)系示意圖;圖2為本發(fā)明實(shí)施例一中的多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)方法的流程示意圖;圖3為本發(fā)明實(shí)施例二中的多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)方法的系統(tǒng)的示意圖。
具體實(shí)施例方式實(shí)施例一本實(shí)施例提供一種多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)方法,適用于Linux系統(tǒng)下的數(shù)據(jù)通信。如圖1所示,在該方法中,分發(fā)模塊從數(shù)據(jù)源獲取數(shù)據(jù),數(shù)據(jù)分發(fā)主要圍繞著一個(gè)共享內(nèi)存區(qū)來(lái)進(jìn)行,作為數(shù)據(jù)源的使用者的各客戶(hù)端模塊,即作為消費(fèi)者的客戶(hù)端模塊的任務(wù)的運(yùn)行以與共享內(nèi)存區(qū)進(jìn)行數(shù)據(jù)的交換為中心。在本發(fā)明中,每個(gè)客戶(hù)端模塊既可同時(shí)做多個(gè)數(shù)據(jù)類(lèi)型的提供者,也可同時(shí)做多個(gè)數(shù)據(jù)類(lèi)型的消費(fèi)者,或者同時(shí)做多個(gè)數(shù)據(jù)類(lèi)型的提供者與消費(fèi)者,并可在過(guò)程中隨時(shí)轉(zhuǎn)換自己的角色,因此在本實(shí)施例中作為提供者的客戶(hù)端模塊和為消費(fèi)者的客戶(hù)端模塊是可以為同一客戶(hù)端模塊。該方法中,首先需要分發(fā)模塊在任務(wù)啟動(dòng)(如上電)時(shí),執(zhí)行如下操作鏈接到已創(chuàng)建的用于為作為消費(fèi)者的各客戶(hù)端模塊存儲(chǔ)數(shù)據(jù)的共享內(nèi)存上;向數(shù)據(jù)結(jié)構(gòu)注冊(cè)自己的數(shù)據(jù)類(lèi)型和特性信息,其中,該數(shù)據(jù)類(lèi)型例如可以為波形類(lèi)型,實(shí)時(shí)類(lèi)型等;例如分發(fā)模塊的數(shù)據(jù)類(lèi)型有波形和實(shí)時(shí)(例如電壓,電流等);該特性信息至少包括分發(fā)模塊ID和分發(fā)模塊將數(shù)據(jù)寫(xiě)入共享內(nèi)存中的寫(xiě)入方式;根據(jù)分發(fā)模塊ID創(chuàng)建與自身相對(duì)應(yīng)的消息隊(duì)列,并根據(jù)各客戶(hù)端模塊ID創(chuàng)建與各客戶(hù)端模塊一一對(duì)應(yīng)的消息隊(duì)列;例如,分發(fā)模塊A,客戶(hù)端模塊B,客戶(hù)端模塊C進(jìn)行數(shù)據(jù)通信,分發(fā)模塊在創(chuàng)建消息隊(duì)列時(shí)會(huì)分別依據(jù)分發(fā)模塊ID(A),客戶(hù)端模塊ID(B),客戶(hù)端模塊ID (C),創(chuàng)建消息隊(duì)列msg(A),msg(B),msg(C)。創(chuàng)建用于指示寫(xiě)入的操作鎖。同樣地,每個(gè)作為消費(fèi)者的客戶(hù)端模塊在其任務(wù)啟動(dòng)時(shí),也執(zhí)行如下對(duì)應(yīng)的操作鏈接到已創(chuàng)建的用于為其存儲(chǔ)數(shù)據(jù)的共享內(nèi)存上;向數(shù)據(jù)結(jié)構(gòu)注冊(cè)用于指示分發(fā)模塊通知作為消費(fèi)者的客戶(hù)端模塊讀取共享內(nèi)存中數(shù)據(jù)的信息和客戶(hù)端特性信息,其中,客戶(hù)端特性信息至少包括所述客戶(hù)端模塊ID和從共享內(nèi)存中讀取數(shù)據(jù)的讀取方式,該讀取方式可包括先寫(xiě)入先讀取方式,以及后寫(xiě)入先讀取方式,以及并支持同時(shí)讀取多個(gè)數(shù)據(jù)的方式;每個(gè)作為消費(fèi)者的客戶(hù)端模塊均根據(jù)分發(fā)模塊ID創(chuàng)建與分發(fā)模塊相對(duì)應(yīng)的消息隊(duì)列,并根據(jù)自身的所述作為消費(fèi)者的客戶(hù)端模塊的客戶(hù)端模塊ID創(chuàng)建與自身相對(duì)應(yīng)的消息隊(duì)列,以及根據(jù)其他客戶(hù)端模塊ID創(chuàng)建與其他客戶(hù)端模塊一一對(duì)應(yīng)的消息隊(duì)列;例如,針對(duì)上述分發(fā)模塊A,客戶(hù)端模塊B,客戶(hù)端模塊C進(jìn)行數(shù)據(jù)通信的實(shí)施例,客戶(hù)端模塊 B分別根據(jù)分發(fā)模塊ID(A),客戶(hù)端模塊ID(B)、客戶(hù)端模塊ID(C)創(chuàng)建消息隊(duì)列msg(A), msg (B),msg (C);同樣,客戶(hù)端模塊C也分別根據(jù)分發(fā)模塊ID (A),客戶(hù)端模塊ID (B)、客戶(hù)端模塊ID(C)創(chuàng)建這樣的消息隊(duì)列msg(A) ,msg(B) ,msg(C)。其中,分發(fā)模塊創(chuàng)建的與自身相對(duì)應(yīng)的消息隊(duì)列與各客戶(hù)端模塊創(chuàng)建的與分發(fā)模塊相對(duì)應(yīng)的消息隊(duì)列為同一消息隊(duì)列;同理,分發(fā)模塊創(chuàng)建的與任一客戶(hù)端模塊相對(duì)應(yīng)的消息隊(duì)列與各客戶(hù)端模塊創(chuàng)建的與該任一客戶(hù)端模塊相對(duì)應(yīng)的消息隊(duì)列為同一消息隊(duì)列。創(chuàng)建所述用于指示讀取的操作鎖。在分發(fā)模塊以及各客戶(hù)端模塊均完成上述過(guò)程后,如圖2所述,具體分發(fā)模塊與作為消費(fèi)者的各客戶(hù)端模塊間執(zhí)行任務(wù)時(shí)的通信過(guò)程如下,包括步驟101,分發(fā)模塊從例如是DSP的數(shù)據(jù)源處獲取數(shù)據(jù);步驟102,分發(fā)模塊將創(chuàng)建的用于指示寫(xiě)入操作的操作鎖指示為寫(xiě)鎖,代表在寫(xiě)入所述共享內(nèi)存的過(guò)程不接收其他訪(fǎng)問(wèn);例如分發(fā)模塊可通過(guò)信號(hào)燈機(jī)制實(shí)現(xiàn)寫(xiě)鎖,代表將要執(zhí)行寫(xiě)入共享內(nèi)存的操作, 在該操作過(guò)程中不允許其他的客戶(hù)端模塊對(duì)共享內(nèi)存進(jìn)行訪(fǎng)問(wèn)。步驟103,分發(fā)模塊根據(jù)各客戶(hù)端模塊已注冊(cè)的數(shù)據(jù)類(lèi)型和客戶(hù)端特性信息將上述數(shù)據(jù)寫(xiě)入到共享內(nèi)存中;具體地,以客戶(hù)端模塊1為例,分發(fā)模塊在鏈接到共享內(nèi)存后,根據(jù)客戶(hù)端模塊1 注冊(cè)的數(shù)據(jù)類(lèi)型(波形類(lèi)型和實(shí)時(shí)類(lèi)型)在共享內(nèi)存中劃分出了對(duì)應(yīng)的buffer,且每個(gè) buffer分別用于對(duì)應(yīng)波形類(lèi)型或?qū)崟r(shí)類(lèi)型的消息隊(duì)列。分發(fā)模塊根據(jù)作為消費(fèi)者的客戶(hù)端模塊1注冊(cè)的波形類(lèi)型和實(shí)時(shí)類(lèi)型,以及客戶(hù)端模塊1的客戶(hù)端模塊ID,將獲取來(lái)的數(shù)據(jù)中屬于客戶(hù)端模塊1的波形類(lèi)型的數(shù)據(jù)寫(xiě)入到共享內(nèi)存中對(duì)應(yīng)的buffer中,將獲取來(lái)的數(shù)據(jù)中屬于客戶(hù)端模塊1的實(shí)時(shí)類(lèi)型的數(shù)據(jù)寫(xiě)入到共享內(nèi)存中對(duì)應(yīng)的buffer。步驟104,分發(fā)模塊根據(jù)所述已注冊(cè)的數(shù)據(jù)類(lèi)型和客戶(hù)端特性信息通知所述各客戶(hù)端模塊來(lái)讀取所述共享內(nèi)存中的數(shù)據(jù)。例如分發(fā)模塊根據(jù)客戶(hù)端模塊1的ID通知客戶(hù)端模塊1來(lái)共享內(nèi)存中讀取波形類(lèi)型的數(shù)據(jù)。步驟105,在通知作為消費(fèi)者的各客戶(hù)端模塊來(lái)讀取所述共享內(nèi)存中的數(shù)據(jù)之后, 分發(fā)模塊將所述操作鎖指示為解寫(xiě)鎖。該步驟105與上述102對(duì)應(yīng),同樣可通過(guò)信號(hào)等實(shí)現(xiàn)指示為解寫(xiě)鎖,代表共享內(nèi)存寫(xiě)入操作結(jié)束,可以接收其他作為消費(fèi)者的客戶(hù)端模塊的訪(fǎng)問(wèn)等。下面,以一個(gè)作為消費(fèi)者的客戶(hù)端模塊為例,步驟106,作為消費(fèi)者的客戶(hù)端模塊在接收到步驟104中分發(fā)模塊的通知后,將用于指示讀取的操作鎖指示為讀鎖,代表在讀取所述共享內(nèi)存的過(guò)程中允許讀訪(fǎng)問(wèn),但拒絕寫(xiě)訪(fǎng)問(wèn);步驟107,作為消費(fèi)者的客戶(hù)端模塊開(kāi)始讀取共享內(nèi)存中的數(shù)據(jù);具體地,作為消費(fèi)者的客戶(hù)端模塊根據(jù)需要的讀取方式開(kāi)始讀取共享內(nèi)存中的數(shù)據(jù),所述讀取方式包括先寫(xiě)入先讀取方式,即按順序讀取消息隊(duì)列中的數(shù)據(jù),后寫(xiě)入先讀取方式,即讀取共享內(nèi)存中最新存儲(chǔ)的數(shù)據(jù),以及同時(shí)讀取多個(gè)數(shù)據(jù)的方式。在這里如果作為消費(fèi)者的客戶(hù)端調(diào)用按順序讀取的接口函數(shù),則作為消費(fèi)者的客戶(hù)端模塊就會(huì)順序讀取共享內(nèi)存里的數(shù)據(jù);如果作為消費(fèi)者的客戶(hù)端調(diào)用讀取最新數(shù)據(jù)的接口函數(shù),則作為消費(fèi)者的客戶(hù)端模塊就會(huì)讀取最新數(shù)據(jù)。此外,在本實(shí)施例中,每個(gè)作為消費(fèi)者的客戶(hù)端模塊在每次讀取完對(duì)應(yīng)共享內(nèi)存中的數(shù)據(jù)后,都可以通過(guò)置共享內(nèi)存中的一個(gè)標(biāo)識(shí)位的方式通知所述分發(fā)模塊是否繼續(xù)向所述作為消費(fèi)者的各客戶(hù)端模塊的消息隊(duì)列發(fā)送讀取共享內(nèi)存的通知。由此在標(biāo)識(shí)位置于不再繼續(xù)讀取的狀態(tài)時(shí),分發(fā)模塊便不會(huì)在將數(shù)據(jù)寫(xiě)入共享內(nèi)存后,發(fā)送通知到作為消費(fèi)者的該客戶(hù)端模塊,進(jìn)而可節(jié)省系統(tǒng)資源。步驟108,作為消費(fèi)者的客戶(hù)端模塊在讀取完共享內(nèi)存中的數(shù)據(jù)后,將所述操作鎖指示為解讀鎖。此時(shí),其他客戶(hù)端模塊可以訪(fǎng)問(wèn)共享內(nèi)存。本實(shí)施例提供的方法中,當(dāng)分發(fā)模塊在獲取到最新的數(shù)據(jù)后更新共享內(nèi)存的數(shù)據(jù),根據(jù)作為消費(fèi)者的各客戶(hù)端模塊注冊(cè)的數(shù)據(jù)類(lèi)型寫(xiě)與各客戶(hù)端模塊相對(duì)應(yīng)的消息隊(duì)列,各客戶(hù)端模塊在運(yùn)行的過(guò)程中通過(guò)處理消息隊(duì)列實(shí)時(shí)更新數(shù)據(jù)。并且,作為消費(fèi)者的各客戶(hù)端模塊在獲取消息隊(duì)列的數(shù)據(jù)時(shí),可根據(jù)注冊(cè)時(shí)的讀取方式自動(dòng)讀取最新數(shù)據(jù),進(jìn)而減少了進(jìn)程間頻繁的數(shù)據(jù)交換,提供了 Linux系統(tǒng)中對(duì)共享內(nèi)存中的數(shù)據(jù)的處理效率,并且節(jié)約了系統(tǒng)資源。實(shí)施例二 本實(shí)施例提供一種多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)系統(tǒng),如圖3所示,包括共享內(nèi)存 30,特別地,還包括分發(fā)模塊31,和至少一個(gè)客戶(hù)端模塊32 ;該至少一個(gè)客戶(hù)端端模塊32可以是作為提供者的客戶(hù)端模塊,也可以是作為消費(fèi)者的客戶(hù)端模塊。分發(fā)模塊31,用于根據(jù)作為消費(fèi)者的客戶(hù)端模塊32已注冊(cè)的數(shù)據(jù)類(lèi)型和客戶(hù)端特性信息將所述數(shù)據(jù)寫(xiě)入到共享內(nèi)存30中;并根據(jù)所述已注冊(cè)的數(shù)據(jù)類(lèi)型和客戶(hù)端特性
8信息通知作為消費(fèi)者的客戶(hù)端模塊32來(lái)讀取所述共享內(nèi)存30中的數(shù)據(jù);每個(gè)作為消費(fèi)者的客戶(hù)端模塊32,用于在接收到通知后,開(kāi)始讀取共享內(nèi)存30中的數(shù)據(jù)。此外,在本實(shí)施例中,分發(fā)模塊31,還用于在任務(wù)啟動(dòng)時(shí),鏈接到已創(chuàng)建用于為作為消費(fèi)者的客戶(hù)端模塊32存儲(chǔ)數(shù)據(jù)的共享內(nèi)存30上;注冊(cè)自己的數(shù)據(jù)類(lèi)型和特性信息,其中,所述特性信息至少包括分發(fā)模塊ID和向共享內(nèi)存中寫(xiě)入數(shù)據(jù)時(shí)的寫(xiě)入方式;根據(jù)分發(fā)模塊ID創(chuàng)建與自身相對(duì)應(yīng)的消息隊(duì)列,并根據(jù)各客戶(hù)端模塊ID創(chuàng)建與各客戶(hù)端模塊一一對(duì)應(yīng)的消息隊(duì)列;創(chuàng)建用于指示寫(xiě)入的操作鎖;每個(gè)所述作為消費(fèi)者的客戶(hù)端模塊32,還用于在各自的任務(wù)啟動(dòng)時(shí),鏈接到已創(chuàng)建的用于為其存儲(chǔ)數(shù)據(jù)的共享內(nèi)存30 ;每個(gè)作為消費(fèi)者的客戶(hù)端模塊均根據(jù)分發(fā)模塊ID 創(chuàng)建與分發(fā)模塊相對(duì)應(yīng)的消息隊(duì)列,并根據(jù)自身的客戶(hù)端模塊ID創(chuàng)建與自身相對(duì)應(yīng)的消息隊(duì)列,以及根據(jù)其他客戶(hù)端模塊ID創(chuàng)建與其他客戶(hù)端模塊一一對(duì)應(yīng)的消息隊(duì)列;創(chuàng)建所述用于指示讀取的操作鎖。進(jìn)一步地,分發(fā)模塊31,還用于在寫(xiě)入之前,將用于指示寫(xiě)入的操作鎖指示為寫(xiě)鎖,代表在寫(xiě)入共享內(nèi)存30的過(guò)程不接收其他訪(fǎng)問(wèn);并在通知作為消費(fèi)者的各客戶(hù)端模塊 32來(lái)讀取共享內(nèi)存30中的數(shù)據(jù)之后,將用于指示寫(xiě)入的操作鎖指示為解寫(xiě)鎖;每個(gè)作為消費(fèi)者的客戶(hù)端模塊32,還用于在接收到分發(fā)模塊31的通知后,將用于指示讀取的操作鎖指示為讀鎖,代表在讀取共享內(nèi)存30的過(guò)程中允許讀訪(fǎng)問(wèn),但拒絕寫(xiě)訪(fǎng)問(wèn),并開(kāi)始讀取共享內(nèi)存中的數(shù)據(jù);在讀取完共享內(nèi)存中的數(shù)據(jù)后,將用于指示讀取的操作鎖指示為解讀鎖;其中,開(kāi)始讀取共享內(nèi)存中的數(shù)據(jù)具體為每個(gè)作為消費(fèi)者的客戶(hù)端模塊32根據(jù)需要調(diào)用相應(yīng)的讀取方式接口函數(shù),讀取方式包括先寫(xiě)入先讀取方式,以及后寫(xiě)入先讀取方式。進(jìn)一步,在本實(shí)施例中,每個(gè)作為消費(fèi)者的客戶(hù)端模塊32,還用于在每次讀取完共享內(nèi)存中的數(shù)據(jù)后,通過(guò)置共享內(nèi)存30中的一個(gè)標(biāo)識(shí)位的方式通知分發(fā)模塊31是否向所述作為消費(fèi)者的各客戶(hù)端模塊32的消息隊(duì)列發(fā)送讀取共享內(nèi)存的通知。在本發(fā)明的另一系統(tǒng)實(shí)施例中,將該系統(tǒng)實(shí)際應(yīng)用到了電能質(zhì)量分析儀ARZ-3W, ARZ-3M,ARZ-3B系統(tǒng)中,因此可將大量的電能質(zhì)量數(shù)據(jù)分發(fā)到顯示、記錄、監(jiān)測(cè)以及上位機(jī)服務(wù)任務(wù)中去。本實(shí)施例提供的系統(tǒng)因?yàn)榉职l(fā)模塊可根據(jù)數(shù)據(jù)類(lèi)型寫(xiě)入數(shù)據(jù),客戶(hù)端模塊可以根據(jù)需要進(jìn)行讀取,所以可以直接執(zhí)行讀取數(shù)據(jù)的進(jìn)程交換,因此避免了多次交互造成的頻繁交換的技術(shù)問(wèn)題,并且在作為消費(fèi)者的各客戶(hù)端模塊不再讀取數(shù)據(jù)的時(shí)候,分發(fā)模塊根據(jù)標(biāo)志位便可不再向作為消費(fèi)者的各客戶(hù)端模塊發(fā)送通知,故而取得了節(jié)省了系統(tǒng)資源, 提高數(shù)據(jù)交換效率的技術(shù)效果。以上所述,僅為本發(fā)明的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)方法,其特征在于,包括 分發(fā)模塊從數(shù)據(jù)源處獲取數(shù)據(jù);分發(fā)模塊根據(jù)作為消費(fèi)者的各客戶(hù)端模塊已注冊(cè)的數(shù)據(jù)類(lèi)型和客戶(hù)端特性信息將所述數(shù)據(jù)寫(xiě)入到共享內(nèi)存;所述分發(fā)模塊根據(jù)所述已注冊(cè)的數(shù)據(jù)類(lèi)型和客戶(hù)端特性信息通知所述作為消費(fèi)者的各客戶(hù)端模塊來(lái)讀取所述共享內(nèi)存中的數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)方法,其特征在于,還包括所述分發(fā)模塊在任務(wù)啟動(dòng)時(shí),鏈接到已創(chuàng)建的用于為所述作為消費(fèi)者的各客戶(hù)端模塊存儲(chǔ)數(shù)據(jù)的共享內(nèi)存上;向數(shù)據(jù)結(jié)構(gòu)注冊(cè)自己的數(shù)據(jù)類(lèi)型和特性信息,其中,所述特性信息至少包括分發(fā)模塊ID和數(shù)據(jù)寫(xiě)入共享內(nèi)存的寫(xiě)入方式;根據(jù)分發(fā)模塊ID創(chuàng)建與自身相對(duì)應(yīng)的消息隊(duì)列,并根據(jù)各客戶(hù)端模塊ID創(chuàng)建與各客戶(hù)端模塊一一對(duì)應(yīng)的消息隊(duì)列;創(chuàng)建用于指示寫(xiě)入的操作鎖;所述作為消費(fèi)者的各客戶(hù)端模塊在其任務(wù)啟動(dòng)時(shí),鏈接到已創(chuàng)建的用于為其存儲(chǔ)數(shù)據(jù)的共享內(nèi)存上;向數(shù)據(jù)結(jié)構(gòu)注冊(cè)用于指示分發(fā)模塊通知作為消費(fèi)者的客戶(hù)端模塊讀取所述共享內(nèi)存中的數(shù)據(jù)的信息和客戶(hù)端特性信息,其中,客戶(hù)端特性信息至少包括所述客戶(hù)端模塊ID和從共享內(nèi)存中讀取數(shù)據(jù)的讀取方式;每個(gè)作為消費(fèi)者的客戶(hù)端模塊均根據(jù)分發(fā)模塊ID創(chuàng)建與分發(fā)模塊相對(duì)應(yīng)的消息隊(duì)列,并根據(jù)自身的客戶(hù)端模塊ID創(chuàng)建與自身相對(duì)應(yīng)的消息隊(duì)列,以及根據(jù)其他客戶(hù)端模塊ID創(chuàng)建與其他客戶(hù)端模塊一一對(duì)應(yīng)的消息隊(duì)列; 創(chuàng)建所述用于指示讀取的操作鎖。
3.根據(jù)權(quán)利要求2所述的多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)方法,其特征在于,該方法還包括 所述分發(fā)模塊在所述寫(xiě)入之前,將所述用于指示寫(xiě)入的操作鎖指示為寫(xiě)鎖,代表在寫(xiě)入所述共享內(nèi)存的過(guò)程不接收其他訪(fǎng)問(wèn);所述分發(fā)模塊在通知所述作為消費(fèi)者的各客戶(hù)端模塊來(lái)讀取所述共享內(nèi)存中的數(shù)據(jù)之后,將所述用于指示寫(xiě)入的操作鎖指示為解寫(xiě)鎖。
4.根據(jù)權(quán)利要求2所述的多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)方法,其特征在于,該方法還包括 對(duì)于每個(gè)所述作為消費(fèi)者的客戶(hù)端模塊,在接收到所述分發(fā)模塊的所述通知后,將所述用于指示讀取的操作鎖指示為讀鎖,代表在讀取所述共享內(nèi)存的過(guò)程中允許讀訪(fǎng)問(wèn),但拒絕寫(xiě)訪(fǎng)問(wèn),并開(kāi)始讀取所述共享內(nèi)存中的數(shù)據(jù);每個(gè)所述作為消費(fèi)者的客戶(hù)端模塊,在讀取完所述共享內(nèi)存中的數(shù)據(jù)后,將所述用于指示讀取的操作鎖指示為解讀鎖。
5.根據(jù)權(quán)利4所述的多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)方法,其特征在于,所述開(kāi)始讀取所述共享內(nèi)存中的數(shù)據(jù)具體為每個(gè)所述作為消費(fèi)者的客戶(hù)端模塊根據(jù)需要的讀取方式開(kāi)始讀取所述共享內(nèi)存中的數(shù)據(jù),所述讀取方式包括先寫(xiě)入先讀取方式,后寫(xiě)入先讀取方式,以及同時(shí)讀取多個(gè)數(shù)據(jù)的方式。
6.根據(jù)權(quán)利4或5所述的多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)方法,其特征在于,該方法還包括 每個(gè)所述作為消費(fèi)者的客戶(hù)端模塊在每次讀取完所述共享內(nèi)存中的數(shù)據(jù)后,通過(guò)置所述共享內(nèi)存中的一個(gè)標(biāo)識(shí)位的方式通知所述分發(fā)模塊是否繼續(xù)向所述作為消費(fèi)者的各客戶(hù)端模塊的消息隊(duì)列發(fā)送讀取共享內(nèi)存的通知。
7.一種多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)系統(tǒng),其特征在于,包括分發(fā)模塊,和至少一個(gè)客戶(hù)端模塊;其中,所述至少一個(gè)客戶(hù)端模塊至少可成為作為消費(fèi)者的客戶(hù)端模塊;所述分發(fā)模塊,用于根據(jù)所述作為消費(fèi)者的客戶(hù)端模塊已注冊(cè)的數(shù)據(jù)類(lèi)型和客戶(hù)端特性信息將所述數(shù)據(jù)寫(xiě)入到共享內(nèi)存中;并根據(jù)所述已注冊(cè)的數(shù)據(jù)類(lèi)型和客戶(hù)端特性信息通知所述作為消費(fèi)者的客戶(hù)端模塊來(lái)讀取所述共享內(nèi)存中的數(shù)據(jù);所述作為消費(fèi)者的客戶(hù)端模塊,用于在接收到所述通知后,開(kāi)始讀取所述共享內(nèi)存中的數(shù)據(jù)。
8.根據(jù)權(quán)利要求7所述的多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)系統(tǒng),其特征在于,所述分發(fā)模塊,還用于在任務(wù)啟動(dòng)時(shí),鏈接到已創(chuàng)建的用于為所述作為消費(fèi)者的各客戶(hù)端模塊存儲(chǔ)數(shù)據(jù)的共享內(nèi)存上;向數(shù)據(jù)結(jié)構(gòu)注冊(cè)自己的數(shù)據(jù)類(lèi)型和特性信息,其中,所述特性信息至少包括分發(fā)模塊ID和數(shù)據(jù)寫(xiě)入共享內(nèi)存的寫(xiě)入方式;根據(jù)分發(fā)模塊ID創(chuàng)建與自身相對(duì)應(yīng)的消息隊(duì)列,并根據(jù)各客戶(hù)端模塊ID創(chuàng)建與各客戶(hù)端模塊一一對(duì)應(yīng)的消息隊(duì)列;創(chuàng)建用于指示寫(xiě)入的操作鎖;每個(gè)所述作為消費(fèi)者的客戶(hù)端模塊,還用于在各自的任務(wù)啟動(dòng)時(shí),鏈接到已創(chuàng)建的用于為其存儲(chǔ)數(shù)據(jù)的共享內(nèi)存上;向數(shù)據(jù)結(jié)構(gòu)注冊(cè)用于指示分發(fā)模塊通知作為消費(fèi)者的客戶(hù)端模塊讀取所述共享內(nèi)存中的數(shù)據(jù)的信息和客戶(hù)端特性信息,其中,客戶(hù)端特性信息至少包括所述客戶(hù)端模塊ID和從共享內(nèi)存中讀取數(shù)據(jù)的讀取方式;每個(gè)作為消費(fèi)者的客戶(hù)端模塊均根據(jù)分發(fā)模塊ID創(chuàng)建與分發(fā)模塊相對(duì)應(yīng)的消息隊(duì)列,并根據(jù)自身的客戶(hù)端模塊ID 創(chuàng)建與自身相對(duì)應(yīng)的消息隊(duì)列,以及根據(jù)其他客戶(hù)端模塊ID創(chuàng)建與其他客戶(hù)端模塊一一對(duì)應(yīng)的消息隊(duì)列;創(chuàng)建所述用于指示讀取的操作鎖。
9.根據(jù)權(quán)利要求8所述的多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)系統(tǒng),其特征在于,所述分發(fā)模塊,還用于在所述寫(xiě)入之前,將所述用于指示寫(xiě)入的操作鎖指示為寫(xiě)鎖,代表在寫(xiě)入所述共享內(nèi)存的過(guò)程不接收其他訪(fǎng)問(wèn);并在通知所述作為消費(fèi)者的客戶(hù)端模塊來(lái)讀取所述共享內(nèi)存中的數(shù)據(jù)之后,將所述用于指示寫(xiě)入的操作鎖指示為解寫(xiě)鎖;每個(gè)所述作為消費(fèi)者的客戶(hù)端模塊,還用于在接收到所述分發(fā)模塊的所述通知后,將所述用于指示讀取的操作鎖指示為讀鎖,代表在讀取所述共享內(nèi)存的過(guò)程中允許讀訪(fǎng)問(wèn), 但拒絕寫(xiě)訪(fǎng)問(wèn),并開(kāi)始讀取共享內(nèi)存中的數(shù)據(jù);在讀取完所述共享內(nèi)存中的數(shù)據(jù)后,將所述用于指示讀取的操作鎖指示為解讀鎖;其中,所述開(kāi)始讀取所述共享內(nèi)存中的數(shù)據(jù)具體為每個(gè)所述作為消費(fèi)者的客戶(hù)端模塊根據(jù)需要的讀取方式讀取所述共享內(nèi)存中的數(shù)據(jù),所述讀取方式包括先寫(xiě)入先讀取方式,后寫(xiě)入先讀取方式,以及同時(shí)讀取多個(gè)數(shù)據(jù)的方式。
10.根據(jù)權(quán)利9所述的多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)系統(tǒng),其特征在于,每個(gè)所述作為消費(fèi)者的客戶(hù)端模塊,還用于在每次讀取完所述共享內(nèi)存中的數(shù)據(jù)后,通過(guò)置所述共享內(nèi)存中的一個(gè)標(biāo)識(shí)位的方式通知所述分發(fā)模塊是否向所述作為消費(fèi)者的各客戶(hù)端模塊的消息隊(duì)列發(fā)送讀取共享內(nèi)存的通知。
全文摘要
本發(fā)明提供一種多任務(wù)間數(shù)據(jù)通信的實(shí)現(xiàn)方法及系統(tǒng),解決了現(xiàn)有技術(shù)中Linux系統(tǒng)下,多個(gè)任務(wù)間在進(jìn)程大量數(shù)據(jù)交換時(shí),數(shù)據(jù)交換效率與數(shù)據(jù)同步不能兼顧的問(wèn)題。該方法包括分發(fā)模塊根據(jù)作為消費(fèi)者的各客戶(hù)端模塊已注冊(cè)的數(shù)據(jù)類(lèi)型和客戶(hù)端特性信息將從作為提供者處獲取來(lái)的數(shù)據(jù)寫(xiě)入共享內(nèi)存中;分發(fā)模塊根據(jù)所述已注冊(cè)的數(shù)據(jù)類(lèi)型和客戶(hù)端特性信息通知所述作為消費(fèi)者的各客戶(hù)端模塊來(lái)讀取所述共享內(nèi)存中的數(shù)據(jù),各客戶(hù)端模塊讀取數(shù)據(jù)時(shí)互不影響,可最大化數(shù)據(jù)交換效率;分發(fā)模塊在各客戶(hù)端模塊有數(shù)據(jù)未及時(shí)處理而丟失時(shí),可通知該客戶(hù)端模塊有數(shù)據(jù)丟失,并同時(shí)通知該客戶(hù)端所丟失的數(shù)據(jù)數(shù)量。本發(fā)明適用于Linux系統(tǒng)下的數(shù)據(jù)通信。
文檔編號(hào)G06F9/46GK102426536SQ201110329140
公開(kāi)日2012年4月25日 申請(qǐng)日期2011年10月26日 優(yōu)先權(quán)日2011年10月26日
發(fā)明者梁亞寧 申請(qǐng)人:深圳市亞特爾科技有限公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1