專利名稱:一種多任務間數據通信的實現方法及系統的制作方法
技術領域:
本發明涉及數據通信領域,尤其涉及一種多任務間數據通信的實現方法及系統。
背景技術:
在嵌入式系統的應用中,往往會遇到有大量實時數據需要送到不同程序由不同的客戶端進行處理的情況,此時還要求數據分發過程中每個處理進程在所需數據丟失時,能夠得到通知并知道所丟失的數據數量。但是,這些數據本身通常產生的速率較高,相對于嵌入式系統有限的內存來說,占用的內存空間較為可觀,而大量數據在進程間交換時,通常采用高效的共享內存機制。但是,在應用上述共享內存機制時,發明人發現現有技術中至少存在如下問題共享內存在多個進程同時訪問時,缺乏同步機制,容易造成共享數據的紊亂,使得共享內存中數據與源數據不再一致。同時,共享內存采用無格式數據,不便于數據的處理。
發明內容
本發明的實施例提供一種多任務間數據通信的實現方法及系統,以便提高Linux 系統中的數據處理效率。為達到上述目的,本發明的實施例采用如下技術方案一種多任務間數據通信的實現方法,包括分發模塊從數據源處獲取數據;分發模塊根據作為消費者的各客戶端模塊已注冊的數據類型和客戶端特性信息將所述數據寫入到共享內存;所述分發模塊根據所述已注冊的數據類型和客戶端特性信息通知所述作為消費者的各客戶端模塊來讀取所述共享內存中的數據。進一步,上述方法還可還包括所述分發模塊在任務啟動時,鏈接到已創建的用于為所述作為消費者的各客戶端模塊存儲數據的共享內存上;向數據結構注冊自己的數據類型和特性信息,其中,所述特性信息至少包括分發模塊ID和數據寫入共享內存的寫入方式;根據分發模塊ID創建與自身相對應的消息隊列,并根據各客戶端模塊ID創建與各客戶端模塊一一對應的消息隊列;創建用于指示寫入的操作鎖;所述作為消費者的各客戶端模塊在其任務啟動時,鏈接到已創建的用于為其存儲數據的共享內存上;向數據結構注冊用于指示分發模塊通知作為消費者的客戶端模塊讀取所述共享內存中的數據的信息和客戶端特性信息,其中,客戶端特性信息至少包括所述客戶端模塊ID和從共享內存中讀取數據的讀取方式;每個作為消費者的客戶端模塊均根據分發模塊ID創建與分發模塊相對應的消息隊列,并根據自身的客戶端模塊ID創建與自身相對應的消息隊列,以及根據其他客戶端模塊ID創建與其他客戶端模塊一一對應的消息隊列;創建所述用于指示讀取的操作鎖。
進一步,該方法還可包括所述分發模塊在所述寫入之前,將所述用于指示寫入的操作鎖指示為寫鎖,代表在寫入所述共享內存的過程不接收其他訪問;所述分發模塊在通知所述作為消費者的各客戶端模塊來讀取所述共享內存中的數據之后,將所述用于指示寫入的操作鎖指示為解寫鎖。相應地,該方法還可包括對于每個所述作為消費者的客戶端模塊,在接收到所述分發模塊的所述通知后, 將所述用于指示讀取的操作鎖指示為讀鎖,代表在讀取所述共享內存的過程中允許讀訪問,但拒絕寫訪問,并開始讀取所述共享內存中的數據;每個所述作為消費者的客戶端模塊,在讀取完所述共享內存中的數據后,將所述用于指示讀取的操作鎖指示為解讀鎖。其中,所述開始讀取所述共享內存中的數據具體為每個所述作為消費者的客戶端模塊根據注冊時的讀取方式開始讀取所述共享內存中的數據,所述讀取方式包括先寫入先讀取方式,后寫入先讀取方式,以及同時讀取多個數據的方式。特別地,該方法還包括每個所述作為消費者的客戶端模塊在每次讀取完所述共享內存中的數據后,通過置所述共享內存中的一個標識位的方式通知所述分發模塊是否繼續向所述作為消費者的各客戶端模塊的消息隊列發送讀取共享內存的通知。一種多任務間數據通信的實現系統,包括分發模塊,和至少一個客戶端模塊;其中,所述至少一個客戶端模塊至少可成為作為消費者的客戶端模塊;所述分發模塊,用于根據所述作為消費者的客戶端模塊已注冊的數據類型和客戶端特性信息將所述數據寫入到共享內存中;并根據所述已注冊的數據類型和客戶端特性信息通知所述作為消費者的客戶端模塊來讀取所述共享內存中的數據;所述作為消費者的客戶端模塊,用于在接收到所述通知后,開始讀取所述共享內存中的數據。進一步,所述分發模塊,還用于在任務啟動時,鏈接到已創建的用于為所述作為消費者的各客戶端模塊存儲數據的共享內存上;向數據結構注冊自己的數據類型和特性信息,其中,所述特性信息至少包括分發模塊ID和數據寫入共享內存的寫入方式;根據分發模塊ID創建與自身相對應的消息隊列,并根據各客戶端模塊ID創建與各客戶端模塊一一對應的消息隊列;創建用于指示寫入的操作鎖;每個所述作為消費者的客戶端模塊,還用于在各自的任務啟動時,鏈接到已創建的用于為其存儲數據的共享內存上;向數據結構注冊用于指示分發模塊通知作為消費者的客戶端模塊讀取所述共享內存中的數據的信息和客戶端特性信息,其中,客戶端特性信息至少包括所述客戶端模塊ID和從共享內存中讀取數據的讀取方式;每個作為消費者的客戶端模塊均根據分發模塊ID創建與分發模塊相對應的消息隊列,并根據自身的客戶端模塊ID創建與自身相對應的消息隊列,以及根據其他客戶端模塊ID創建與其他客戶端模塊一一對應的消息隊列;創建所述用于指示讀取的操作鎖。進一步,所述分發模塊,還用于在所述寫入之前,將所述用于指示寫入的操作鎖指示為寫鎖,代表在寫入所述共享內存的過程不接收其他訪問;并在通知所述作為消費者的客戶端模塊來讀取所述共享內存中的數據之后,將所述用于指示寫入的操作鎖指示為解寫鎖;每個所述作為消費者的客戶端模塊,還用于在接收到所述分發模塊的所述通知后,將所述用于指示讀取的操作鎖指示為讀鎖,代表在讀取所述共享內存的過程中允許讀訪問,但拒絕寫訪問,并開始讀取共享內存中的數據;在讀取完所述共享內存中的數據后, 將所述用于指示讀取的操作鎖指示為解讀鎖;其中,所述開始讀取所述共享內存中的數據具體為每個所述作為消費者的客戶端模塊根據注冊時的讀取方式讀取所述共享內存中的數據,所述讀取方式包括先寫入先讀取方式,后寫入先讀取方式,以及同時讀取多個數據的方式。特別地,每個所述作為消費者的客戶端模塊,還用于在每次讀取完所述共享內存中的數據后,通過置所述共享內存中的一個標識位的方式通知所述分發模塊是否向所述作為消費者的各客戶端模塊的消息隊列發送讀取共享內存的通知。本實施例提供的上述方案,各客戶端模塊的任務進程通過注冊需要的數據類型, 在運行的過程中獲取注冊類型的數據,因此,在客戶端模塊不需要數據時,分發模塊不再對數據進行分發,進而節約資源,提高了數據交換的效率。同時,對于只需要讀取數據的模塊, 通過在讀數據時可與其它客戶端模塊并發讀取,提高了共享內存數據交換的效率。通過在數據交換過程中的讀鎖,寫鎖控制,做到了多個任務間的數據保護,完成了數據同步,并兼顧了數據交換效率。另外,所述各客戶端模塊讀取數據時互不影響,可最大化數據交換效率;所述分發模塊在各客戶端模塊有數據未及時處理而丟失時,可通知該客戶端模塊有數據丟失,并同時通知該客戶端所丟失的數據數量。
圖1為本發明實施例一中的各客戶端模塊間關系示意圖;圖2為本發明實施例一中的多任務間數據通信的實現方法的流程示意圖;圖3為本發明實施例二中的多任務間數據通信的實現方法的系統的示意圖。
具體實施例方式實施例一本實施例提供一種多任務間數據通信的實現方法,適用于Linux系統下的數據通信。如圖1所示,在該方法中,分發模塊從數據源獲取數據,數據分發主要圍繞著一個共享內存區來進行,作為數據源的使用者的各客戶端模塊,即作為消費者的客戶端模塊的任務的運行以與共享內存區進行數據的交換為中心。在本發明中,每個客戶端模塊既可同時做多個數據類型的提供者,也可同時做多個數據類型的消費者,或者同時做多個數據類型的提供者與消費者,并可在過程中隨時轉換自己的角色,因此在本實施例中作為提供者的客戶端模塊和為消費者的客戶端模塊是可以為同一客戶端模塊。該方法中,首先需要分發模塊在任務啟動(如上電)時,執行如下操作鏈接到已創建的用于為作為消費者的各客戶端模塊存儲數據的共享內存上;向數據結構注冊自己的數據類型和特性信息,其中,該數據類型例如可以為波形類型,實時類型等;例如分發模塊的數據類型有波形和實時(例如電壓,電流等);該特性信息至少包括分發模塊ID和分發模塊將數據寫入共享內存中的寫入方式;根據分發模塊ID創建與自身相對應的消息隊列,并根據各客戶端模塊ID創建與各客戶端模塊一一對應的消息隊列;例如,分發模塊A,客戶端模塊B,客戶端模塊C進行數據通信,分發模塊在創建消息隊列時會分別依據分發模塊ID(A),客戶端模塊ID(B),客戶端模塊ID (C),創建消息隊列msg(A),msg(B),msg(C)。創建用于指示寫入的操作鎖。同樣地,每個作為消費者的客戶端模塊在其任務啟動時,也執行如下對應的操作鏈接到已創建的用于為其存儲數據的共享內存上;向數據結構注冊用于指示分發模塊通知作為消費者的客戶端模塊讀取共享內存中數據的信息和客戶端特性信息,其中,客戶端特性信息至少包括所述客戶端模塊ID和從共享內存中讀取數據的讀取方式,該讀取方式可包括先寫入先讀取方式,以及后寫入先讀取方式,以及并支持同時讀取多個數據的方式;每個作為消費者的客戶端模塊均根據分發模塊ID創建與分發模塊相對應的消息隊列,并根據自身的所述作為消費者的客戶端模塊的客戶端模塊ID創建與自身相對應的消息隊列,以及根據其他客戶端模塊ID創建與其他客戶端模塊一一對應的消息隊列;例如,針對上述分發模塊A,客戶端模塊B,客戶端模塊C進行數據通信的實施例,客戶端模塊 B分別根據分發模塊ID(A),客戶端模塊ID(B)、客戶端模塊ID(C)創建消息隊列msg(A), msg (B),msg (C);同樣,客戶端模塊C也分別根據分發模塊ID (A),客戶端模塊ID (B)、客戶端模塊ID(C)創建這樣的消息隊列msg(A) ,msg(B) ,msg(C)。其中,分發模塊創建的與自身相對應的消息隊列與各客戶端模塊創建的與分發模塊相對應的消息隊列為同一消息隊列;同理,分發模塊創建的與任一客戶端模塊相對應的消息隊列與各客戶端模塊創建的與該任一客戶端模塊相對應的消息隊列為同一消息隊列。創建所述用于指示讀取的操作鎖。在分發模塊以及各客戶端模塊均完成上述過程后,如圖2所述,具體分發模塊與作為消費者的各客戶端模塊間執行任務時的通信過程如下,包括步驟101,分發模塊從例如是DSP的數據源處獲取數據;步驟102,分發模塊將創建的用于指示寫入操作的操作鎖指示為寫鎖,代表在寫入所述共享內存的過程不接收其他訪問;例如分發模塊可通過信號燈機制實現寫鎖,代表將要執行寫入共享內存的操作, 在該操作過程中不允許其他的客戶端模塊對共享內存進行訪問。步驟103,分發模塊根據各客戶端模塊已注冊的數據類型和客戶端特性信息將上述數據寫入到共享內存中;具體地,以客戶端模塊1為例,分發模塊在鏈接到共享內存后,根據客戶端模塊1 注冊的數據類型(波形類型和實時類型)在共享內存中劃分出了對應的buffer,且每個 buffer分別用于對應波形類型或實時類型的消息隊列。分發模塊根據作為消費者的客戶端模塊1注冊的波形類型和實時類型,以及客戶端模塊1的客戶端模塊ID,將獲取來的數據中屬于客戶端模塊1的波形類型的數據寫入到共享內存中對應的buffer中,將獲取來的數據中屬于客戶端模塊1的實時類型的數據寫入到共享內存中對應的buffer。步驟104,分發模塊根據所述已注冊的數據類型和客戶端特性信息通知所述各客戶端模塊來讀取所述共享內存中的數據。例如分發模塊根據客戶端模塊1的ID通知客戶端模塊1來共享內存中讀取波形類型的數據。步驟105,在通知作為消費者的各客戶端模塊來讀取所述共享內存中的數據之后, 分發模塊將所述操作鎖指示為解寫鎖。該步驟105與上述102對應,同樣可通過信號等實現指示為解寫鎖,代表共享內存寫入操作結束,可以接收其他作為消費者的客戶端模塊的訪問等。下面,以一個作為消費者的客戶端模塊為例,步驟106,作為消費者的客戶端模塊在接收到步驟104中分發模塊的通知后,將用于指示讀取的操作鎖指示為讀鎖,代表在讀取所述共享內存的過程中允許讀訪問,但拒絕寫訪問;步驟107,作為消費者的客戶端模塊開始讀取共享內存中的數據;具體地,作為消費者的客戶端模塊根據需要的讀取方式開始讀取共享內存中的數據,所述讀取方式包括先寫入先讀取方式,即按順序讀取消息隊列中的數據,后寫入先讀取方式,即讀取共享內存中最新存儲的數據,以及同時讀取多個數據的方式。在這里如果作為消費者的客戶端調用按順序讀取的接口函數,則作為消費者的客戶端模塊就會順序讀取共享內存里的數據;如果作為消費者的客戶端調用讀取最新數據的接口函數,則作為消費者的客戶端模塊就會讀取最新數據。此外,在本實施例中,每個作為消費者的客戶端模塊在每次讀取完對應共享內存中的數據后,都可以通過置共享內存中的一個標識位的方式通知所述分發模塊是否繼續向所述作為消費者的各客戶端模塊的消息隊列發送讀取共享內存的通知。由此在標識位置于不再繼續讀取的狀態時,分發模塊便不會在將數據寫入共享內存后,發送通知到作為消費者的該客戶端模塊,進而可節省系統資源。步驟108,作為消費者的客戶端模塊在讀取完共享內存中的數據后,將所述操作鎖指示為解讀鎖。此時,其他客戶端模塊可以訪問共享內存。本實施例提供的方法中,當分發模塊在獲取到最新的數據后更新共享內存的數據,根據作為消費者的各客戶端模塊注冊的數據類型寫與各客戶端模塊相對應的消息隊列,各客戶端模塊在運行的過程中通過處理消息隊列實時更新數據。并且,作為消費者的各客戶端模塊在獲取消息隊列的數據時,可根據注冊時的讀取方式自動讀取最新數據,進而減少了進程間頻繁的數據交換,提供了 Linux系統中對共享內存中的數據的處理效率,并且節約了系統資源。實施例二 本實施例提供一種多任務間數據通信的實現系統,如圖3所示,包括共享內存 30,特別地,還包括分發模塊31,和至少一個客戶端模塊32 ;該至少一個客戶端端模塊32可以是作為提供者的客戶端模塊,也可以是作為消費者的客戶端模塊。分發模塊31,用于根據作為消費者的客戶端模塊32已注冊的數據類型和客戶端特性信息將所述數據寫入到共享內存30中;并根據所述已注冊的數據類型和客戶端特性
8信息通知作為消費者的客戶端模塊32來讀取所述共享內存30中的數據;每個作為消費者的客戶端模塊32,用于在接收到通知后,開始讀取共享內存30中的數據。此外,在本實施例中,分發模塊31,還用于在任務啟動時,鏈接到已創建用于為作為消費者的客戶端模塊32存儲數據的共享內存30上;注冊自己的數據類型和特性信息,其中,所述特性信息至少包括分發模塊ID和向共享內存中寫入數據時的寫入方式;根據分發模塊ID創建與自身相對應的消息隊列,并根據各客戶端模塊ID創建與各客戶端模塊一一對應的消息隊列;創建用于指示寫入的操作鎖;每個所述作為消費者的客戶端模塊32,還用于在各自的任務啟動時,鏈接到已創建的用于為其存儲數據的共享內存30 ;每個作為消費者的客戶端模塊均根據分發模塊ID 創建與分發模塊相對應的消息隊列,并根據自身的客戶端模塊ID創建與自身相對應的消息隊列,以及根據其他客戶端模塊ID創建與其他客戶端模塊一一對應的消息隊列;創建所述用于指示讀取的操作鎖。進一步地,分發模塊31,還用于在寫入之前,將用于指示寫入的操作鎖指示為寫鎖,代表在寫入共享內存30的過程不接收其他訪問;并在通知作為消費者的各客戶端模塊 32來讀取共享內存30中的數據之后,將用于指示寫入的操作鎖指示為解寫鎖;每個作為消費者的客戶端模塊32,還用于在接收到分發模塊31的通知后,將用于指示讀取的操作鎖指示為讀鎖,代表在讀取共享內存30的過程中允許讀訪問,但拒絕寫訪問,并開始讀取共享內存中的數據;在讀取完共享內存中的數據后,將用于指示讀取的操作鎖指示為解讀鎖;其中,開始讀取共享內存中的數據具體為每個作為消費者的客戶端模塊32根據需要調用相應的讀取方式接口函數,讀取方式包括先寫入先讀取方式,以及后寫入先讀取方式。進一步,在本實施例中,每個作為消費者的客戶端模塊32,還用于在每次讀取完共享內存中的數據后,通過置共享內存30中的一個標識位的方式通知分發模塊31是否向所述作為消費者的各客戶端模塊32的消息隊列發送讀取共享內存的通知。在本發明的另一系統實施例中,將該系統實際應用到了電能質量分析儀ARZ-3W, ARZ-3M,ARZ-3B系統中,因此可將大量的電能質量數據分發到顯示、記錄、監測以及上位機服務任務中去。本實施例提供的系統因為分發模塊可根據數據類型寫入數據,客戶端模塊可以根據需要進行讀取,所以可以直接執行讀取數據的進程交換,因此避免了多次交互造成的頻繁交換的技術問題,并且在作為消費者的各客戶端模塊不再讀取數據的時候,分發模塊根據標志位便可不再向作為消費者的各客戶端模塊發送通知,故而取得了節省了系統資源, 提高數據交換效率的技術效果。以上所述,僅為本發明的具體實施方式
,但本發明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員在本發明揭露的技術范圍內,可輕易想到變化或替換,都應涵蓋在本發明的保護范圍之內。因此,本發明的保護范圍應所述以權利要求的保護范圍為準。
權利要求
1.一種多任務間數據通信的實現方法,其特征在于,包括 分發模塊從數據源處獲取數據;分發模塊根據作為消費者的各客戶端模塊已注冊的數據類型和客戶端特性信息將所述數據寫入到共享內存;所述分發模塊根據所述已注冊的數據類型和客戶端特性信息通知所述作為消費者的各客戶端模塊來讀取所述共享內存中的數據。
2.根據權利要求1所述的多任務間數據通信的實現方法,其特征在于,還包括所述分發模塊在任務啟動時,鏈接到已創建的用于為所述作為消費者的各客戶端模塊存儲數據的共享內存上;向數據結構注冊自己的數據類型和特性信息,其中,所述特性信息至少包括分發模塊ID和數據寫入共享內存的寫入方式;根據分發模塊ID創建與自身相對應的消息隊列,并根據各客戶端模塊ID創建與各客戶端模塊一一對應的消息隊列;創建用于指示寫入的操作鎖;所述作為消費者的各客戶端模塊在其任務啟動時,鏈接到已創建的用于為其存儲數據的共享內存上;向數據結構注冊用于指示分發模塊通知作為消費者的客戶端模塊讀取所述共享內存中的數據的信息和客戶端特性信息,其中,客戶端特性信息至少包括所述客戶端模塊ID和從共享內存中讀取數據的讀取方式;每個作為消費者的客戶端模塊均根據分發模塊ID創建與分發模塊相對應的消息隊列,并根據自身的客戶端模塊ID創建與自身相對應的消息隊列,以及根據其他客戶端模塊ID創建與其他客戶端模塊一一對應的消息隊列; 創建所述用于指示讀取的操作鎖。
3.根據權利要求2所述的多任務間數據通信的實現方法,其特征在于,該方法還包括 所述分發模塊在所述寫入之前,將所述用于指示寫入的操作鎖指示為寫鎖,代表在寫入所述共享內存的過程不接收其他訪問;所述分發模塊在通知所述作為消費者的各客戶端模塊來讀取所述共享內存中的數據之后,將所述用于指示寫入的操作鎖指示為解寫鎖。
4.根據權利要求2所述的多任務間數據通信的實現方法,其特征在于,該方法還包括 對于每個所述作為消費者的客戶端模塊,在接收到所述分發模塊的所述通知后,將所述用于指示讀取的操作鎖指示為讀鎖,代表在讀取所述共享內存的過程中允許讀訪問,但拒絕寫訪問,并開始讀取所述共享內存中的數據;每個所述作為消費者的客戶端模塊,在讀取完所述共享內存中的數據后,將所述用于指示讀取的操作鎖指示為解讀鎖。
5.根據權利4所述的多任務間數據通信的實現方法,其特征在于,所述開始讀取所述共享內存中的數據具體為每個所述作為消費者的客戶端模塊根據需要的讀取方式開始讀取所述共享內存中的數據,所述讀取方式包括先寫入先讀取方式,后寫入先讀取方式,以及同時讀取多個數據的方式。
6.根據權利4或5所述的多任務間數據通信的實現方法,其特征在于,該方法還包括 每個所述作為消費者的客戶端模塊在每次讀取完所述共享內存中的數據后,通過置所述共享內存中的一個標識位的方式通知所述分發模塊是否繼續向所述作為消費者的各客戶端模塊的消息隊列發送讀取共享內存的通知。
7.一種多任務間數據通信的實現系統,其特征在于,包括分發模塊,和至少一個客戶端模塊;其中,所述至少一個客戶端模塊至少可成為作為消費者的客戶端模塊;所述分發模塊,用于根據所述作為消費者的客戶端模塊已注冊的數據類型和客戶端特性信息將所述數據寫入到共享內存中;并根據所述已注冊的數據類型和客戶端特性信息通知所述作為消費者的客戶端模塊來讀取所述共享內存中的數據;所述作為消費者的客戶端模塊,用于在接收到所述通知后,開始讀取所述共享內存中的數據。
8.根據權利要求7所述的多任務間數據通信的實現系統,其特征在于,所述分發模塊,還用于在任務啟動時,鏈接到已創建的用于為所述作為消費者的各客戶端模塊存儲數據的共享內存上;向數據結構注冊自己的數據類型和特性信息,其中,所述特性信息至少包括分發模塊ID和數據寫入共享內存的寫入方式;根據分發模塊ID創建與自身相對應的消息隊列,并根據各客戶端模塊ID創建與各客戶端模塊一一對應的消息隊列;創建用于指示寫入的操作鎖;每個所述作為消費者的客戶端模塊,還用于在各自的任務啟動時,鏈接到已創建的用于為其存儲數據的共享內存上;向數據結構注冊用于指示分發模塊通知作為消費者的客戶端模塊讀取所述共享內存中的數據的信息和客戶端特性信息,其中,客戶端特性信息至少包括所述客戶端模塊ID和從共享內存中讀取數據的讀取方式;每個作為消費者的客戶端模塊均根據分發模塊ID創建與分發模塊相對應的消息隊列,并根據自身的客戶端模塊ID 創建與自身相對應的消息隊列,以及根據其他客戶端模塊ID創建與其他客戶端模塊一一對應的消息隊列;創建所述用于指示讀取的操作鎖。
9.根據權利要求8所述的多任務間數據通信的實現系統,其特征在于,所述分發模塊,還用于在所述寫入之前,將所述用于指示寫入的操作鎖指示為寫鎖,代表在寫入所述共享內存的過程不接收其他訪問;并在通知所述作為消費者的客戶端模塊來讀取所述共享內存中的數據之后,將所述用于指示寫入的操作鎖指示為解寫鎖;每個所述作為消費者的客戶端模塊,還用于在接收到所述分發模塊的所述通知后,將所述用于指示讀取的操作鎖指示為讀鎖,代表在讀取所述共享內存的過程中允許讀訪問, 但拒絕寫訪問,并開始讀取共享內存中的數據;在讀取完所述共享內存中的數據后,將所述用于指示讀取的操作鎖指示為解讀鎖;其中,所述開始讀取所述共享內存中的數據具體為每個所述作為消費者的客戶端模塊根據需要的讀取方式讀取所述共享內存中的數據,所述讀取方式包括先寫入先讀取方式,后寫入先讀取方式,以及同時讀取多個數據的方式。
10.根據權利9所述的多任務間數據通信的實現系統,其特征在于,每個所述作為消費者的客戶端模塊,還用于在每次讀取完所述共享內存中的數據后,通過置所述共享內存中的一個標識位的方式通知所述分發模塊是否向所述作為消費者的各客戶端模塊的消息隊列發送讀取共享內存的通知。
全文摘要
本發明提供一種多任務間數據通信的實現方法及系統,解決了現有技術中Linux系統下,多個任務間在進程大量數據交換時,數據交換效率與數據同步不能兼顧的問題。該方法包括分發模塊根據作為消費者的各客戶端模塊已注冊的數據類型和客戶端特性信息將從作為提供者處獲取來的數據寫入共享內存中;分發模塊根據所述已注冊的數據類型和客戶端特性信息通知所述作為消費者的各客戶端模塊來讀取所述共享內存中的數據,各客戶端模塊讀取數據時互不影響,可最大化數據交換效率;分發模塊在各客戶端模塊有數據未及時處理而丟失時,可通知該客戶端模塊有數據丟失,并同時通知該客戶端所丟失的數據數量。本發明適用于Linux系統下的數據通信。
文檔編號G06F9/46GK102426536SQ201110329140
公開日2012年4月25日 申請日期2011年10月26日 優先權日2011年10月26日
發明者梁亞寧 申請人:深圳市亞特爾科技有限公司