用于機器人操作系統(tǒng)的消息傳輸方法和裝置的制造方法
【專利摘要】本申請公開了用于機器人操作系統(tǒng)的消息傳輸方法和裝置。所述方法的一【具體實施方式】包括:發(fā)送節(jié)點循環(huán)遍歷查找共享內(nèi)存中的內(nèi)存段中內(nèi)存塊標(biāo)志量的寫入標(biāo)識指示可寫入并且讀取標(biāo)識指示0值的內(nèi)存塊;所述發(fā)送節(jié)點將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入后向所查找到的內(nèi)存塊寫入數(shù)據(jù);所述發(fā)送節(jié)點在寫入數(shù)據(jù)后將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入、退出所查找到的內(nèi)存塊并通知接收節(jié)點所查找到的內(nèi)存塊可讀。該實施方式實現(xiàn)了發(fā)送節(jié)點和接收節(jié)點互不干擾、有順序地讀寫共享內(nèi)存。
【專利說明】
用于機器人操作系統(tǒng)的消息傳輸方法和裝置
技術(shù)領(lǐng)域
[0001]本申請涉及計算機技術(shù)領(lǐng)域,具體涉及計算機操作系統(tǒng)技術(shù)領(lǐng)域,尤其涉及用于機器人操作系統(tǒng)的消息傳輸方法和裝置?!颈尘凹夹g(shù)】
[0002]機器人操作系統(tǒng)(ROS,Robot Operating System)由很多節(jié)點和話題構(gòu)成,每個節(jié)點都是一個獨立的進程,話題是節(jié)點之間建立連接的依據(jù)。節(jié)點分為兩種:發(fā)送節(jié)點和接收節(jié)點,發(fā)送節(jié)點負(fù)責(zé)將處理完成的信息發(fā)送出去,接收節(jié)點負(fù)責(zé)接收發(fā)送節(jié)點發(fā)出的信息, 并根據(jù)命令做出相應(yīng)操作(有時一個節(jié)點即是發(fā)送者又是接收者)。當(dāng)節(jié)點之間建立連接后,發(fā)送-接收節(jié)點通過共享內(nèi)存的方式進行消息傳輸。
[0003]使用共享內(nèi)存的方式進行傳輸通常是多個發(fā)送和接收節(jié)點同時使用同一段共享內(nèi)存區(qū)。兩個典型的問題是:1)當(dāng)有發(fā)送節(jié)點正在向共享內(nèi)存區(qū)寫入數(shù)據(jù)時,有其他節(jié)點也對這段內(nèi)存進行讀寫,這時發(fā)送節(jié)點可能被中途打斷,導(dǎo)致異常退出;2)當(dāng)有接收節(jié)點正在讀取某段共享內(nèi)存區(qū)時,恰好發(fā)送節(jié)點也對這塊內(nèi)存進行寫入,接收節(jié)點將讀到錯誤的信息,做出錯誤的處理結(jié)果,并下達(dá)錯誤的運行指令。所以如何同步這些節(jié)點進程,讓他們互不干擾有順序地讀寫共享內(nèi)存就成為了一個要解決的問題。
【發(fā)明內(nèi)容】
[0004]本申請的目的在于提出一種用于機器人操作系統(tǒng)的消息傳輸方法和裝置,來解決以上【背景技術(shù)】部分提到的技術(shù)問題。
[0005]第一方面,本申請?zhí)峁┝艘环N用于機器人操作系統(tǒng)的消息傳輸方法,所述方法包括:發(fā)送節(jié)點循環(huán)遍歷查找共享內(nèi)存中的內(nèi)存段中內(nèi)存塊標(biāo)志量的寫入標(biāo)識指示可寫入并且讀取標(biāo)識指示〇值的內(nèi)存塊,一個內(nèi)存段包括多個內(nèi)存塊,其中,對于每個內(nèi)存塊,內(nèi)存塊標(biāo)志量存儲在該內(nèi)存塊上且包括寫入標(biāo)識和讀取標(biāo)識,寫入標(biāo)識指示該內(nèi)存塊正在寫入或者可寫入,讀取標(biāo)識指示正在讀取該內(nèi)存塊的接收節(jié)點數(shù)目;所述發(fā)送節(jié)點將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入后向所查找到的內(nèi)存塊寫入數(shù)據(jù); 所述發(fā)送節(jié)點在寫入數(shù)據(jù)后將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入、退出所查找到的內(nèi)存塊并通知接收節(jié)點所查找到的內(nèi)存塊可讀。
[0006]在一些實施例中,所述發(fā)送節(jié)點將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入后向所查找到的內(nèi)存塊寫入數(shù)據(jù),包括:所述發(fā)送節(jié)點在將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入之前對所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖;所述發(fā)送節(jié)點在將所述內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入之后釋放所述數(shù)據(jù)互斥鎖。
[0007]在一些實施例中,所述發(fā)送節(jié)點在寫入數(shù)據(jù)后將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入,包括:所述發(fā)送節(jié)點在將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入之前對所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖;所述發(fā)送節(jié)點在將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入之后釋放所述數(shù)據(jù)互斥鎖。
[0008]第二方面,本申請?zhí)峁┝艘环N用于機器人操作系統(tǒng)的消息傳輸方法,其特征在于,所述方法包括:接收節(jié)點接收發(fā)送節(jié)點發(fā)送的內(nèi)存塊可讀的通知后,判斷所述內(nèi)存塊可讀的通知所指示的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識是否指示可寫入,其中,共享內(nèi)存中的內(nèi)存段包括多個內(nèi)存塊,對于每個內(nèi)存塊,內(nèi)存塊標(biāo)志量存儲在該內(nèi)存塊上且包括寫入標(biāo)識和讀取標(biāo)識,寫入標(biāo)識指示該內(nèi)存塊正在寫入或者可寫入,讀取標(biāo)識指示正在讀取該內(nèi)存塊的接收節(jié)點數(shù)目;當(dāng)所述內(nèi)存塊可讀的通知所指示的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識指示可寫入時,所述接收節(jié)點將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加I后從所述內(nèi)存塊讀取數(shù)據(jù);所述接收節(jié)點讀取數(shù)據(jù)后將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減1、退出所述內(nèi)存塊并通知發(fā)送節(jié)點所述內(nèi)存塊可寫入。
[0009]在一些實施例中,所述接收節(jié)點將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加I后從所述內(nèi)存塊讀取數(shù)據(jù),包括:所述接收節(jié)點在將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加I之前對所述內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖;所述接收節(jié)點在將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加I之后釋放所述數(shù)據(jù)互斥鎖。
[0010]在一些實施例中,所述接收節(jié)點讀取數(shù)據(jù)后將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減I,包括:所述接收節(jié)點在將所述內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減I之前對所述內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖;所述接收節(jié)點在將所述內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減I之后釋放所述數(shù)據(jù)互斥鎖。
[0011]第三方面,本申請?zhí)峁┝艘环N用于機器人操作系統(tǒng)的消息傳輸裝置,其特征在于,所述裝置包括:查找單元,配置用于循環(huán)遍歷查找共享內(nèi)存中的內(nèi)存段中內(nèi)存塊標(biāo)志量的寫入標(biāo)識指示可寫入并且讀取標(biāo)識指示O值的內(nèi)存塊,一個內(nèi)存段包括多個內(nèi)存塊,其中,對于每個內(nèi)存塊,內(nèi)存塊標(biāo)志量存儲在該內(nèi)存塊上且包括寫入標(biāo)識和讀取標(biāo)識,寫入標(biāo)識指示該內(nèi)存塊正在寫入或者可寫入,讀取標(biāo)識指示正在讀取該內(nèi)存塊的接收節(jié)點數(shù)目;寫入單元,配置用于將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入后向所查找到的內(nèi)存塊寫入數(shù)據(jù);讀取通知單元,配置用于在寫入數(shù)據(jù)后將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入、退出所查找到的內(nèi)存塊并通知接收節(jié)點所查找到的內(nèi)存塊可讀。
[0012]在一些實施例中,所述寫入單元進一步配置用于:在將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入之前對所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖;在將所述內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入之后釋放所述數(shù)據(jù)互斥鎖。
[0013]在一些實施例中,所述讀取通知單元進一步配置用于:在將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入之前對所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖;在將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入之后釋放所述數(shù)據(jù)互斥鎖。
[0014]第四方面,本申請?zhí)峁┝艘环N用于機器人操作系統(tǒng)的消息傳輸裝置,其特征在于,所述裝置包括:接收單元,配置用于接收發(fā)送節(jié)點發(fā)送的內(nèi)存塊可讀的通知后,判斷所述內(nèi)存塊可讀的通知所指示的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識是否指示可寫入,其中,對于每個內(nèi)存塊,內(nèi)存塊標(biāo)志量存儲在該內(nèi)存塊上且包括寫入標(biāo)識和讀取標(biāo)識,寫入標(biāo)識指示該內(nèi)存塊正在寫入或者可寫入,讀取標(biāo)識指示正在讀取該內(nèi)存塊的接收節(jié)點數(shù)目;讀取單元,配置用于當(dāng)所述內(nèi)存塊可讀的通知所指示的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識指示可寫入時,將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加1后從所述內(nèi)存塊讀取數(shù)據(jù);寫入通知單元,配置用于讀取數(shù)據(jù)后將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減1、退出所述內(nèi)存塊并通知發(fā)送節(jié)點所述內(nèi)存塊可寫入。
[0015]在一些實施例中,所述讀取單元進一步配置用于:在將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加1之前對所述內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖;在將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加1之后釋放所述數(shù)據(jù)互斥鎖。
[0016]在一些實施例中,所述寫入通知單元進一步配置用于:在將所述內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減1之前對所述內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖;在將所述內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減1之后釋放所述數(shù)據(jù)互斥鎖。
[0017]本申請?zhí)峁┑挠糜跈C器人操作系統(tǒng)的消息傳輸方法和裝置,通過使用內(nèi)存塊標(biāo)志量和數(shù)據(jù)互斥鎖,有效地保證了內(nèi)存塊在同一時刻只能被一個發(fā)送節(jié)點寫入或多個接收節(jié)點讀取?!靖綀D說明】
[0018]通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細(xì)描述,本申請的其它特征、目的和優(yōu)點將會變得更明顯:
[0019]圖1是本申請可以應(yīng)用于其中的示例性系統(tǒng)架構(gòu)圖;[〇〇2〇]圖2a是根據(jù)本申請的用于機器人操作系統(tǒng)的消息傳輸方法的一個實施例的流程圖;
[0021]圖2b是根據(jù)本申請的用于機器人操作系統(tǒng)的消息傳輸方法的又一個實施例的流程圖;
[0022]圖3是根據(jù)本申請的用于機器人操作系統(tǒng)的消息傳輸方法的一個應(yīng)用場景的示意圖;[〇〇23]圖4a是圖2a所示的用于機器人操作系統(tǒng)的消息傳輸方法的又一個實施例的流程圖;
[0024]圖4b是圖2b所示的用于機器人操作系統(tǒng)的消息傳輸方法的又一個實施例的流程圖;
[0025]圖5a是根據(jù)本申請的用于機器人操作系統(tǒng)的消息傳輸裝置的一個實施例的結(jié)構(gòu)示意圖;
[0026]圖5b是根據(jù)本申請的用于機器人操作系統(tǒng)的消息傳輸裝置的一個實施例的結(jié)構(gòu)示意圖;
[0027]圖6是適于用來實現(xiàn)本申請實施例的終端設(shè)備的計算機系統(tǒng)的結(jié)構(gòu)示意圖。【具體實施方式】
[0028]下面結(jié)合附圖和實施例對本申請作進一步的詳細(xì)說明??梢岳斫獾氖?,此處所描述的具體實施例僅僅用于解釋相關(guān)發(fā)明,而非對該發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與有關(guān)發(fā)明相關(guān)的部分。
[0029]需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。下面將參考附圖并結(jié)合實施例來詳細(xì)說明本申請。
[0030]圖1示出了可以應(yīng)用本申請的用于機器人操作系統(tǒng)的消息傳輸方法或裝置的實施例的示例性系統(tǒng)架構(gòu)100。
[0031]如圖1所示,系統(tǒng)架構(gòu)100可以包括無人駕駛車輛101、后臺服務(wù)器106和網(wǎng)絡(luò)105。 網(wǎng)絡(luò)105用以在無人駕駛車輛101和后臺服務(wù)器106之間提供通信鏈路的介質(zhì)。網(wǎng)絡(luò)105可以包括各種連接類型,例如有線、無線通信鏈路或者光纖電纜等等。
[0032]后臺服務(wù)器106可以是提供各種服務(wù)的服務(wù)器,例如為無人駕駛車輛101提供在線地圖的后臺地圖服務(wù)器。[〇〇33]無人駕駛車輛101上可以安裝有采集設(shè)備102、103和車載控制器104。采集設(shè)備 102、103可以通過各種通信方式(例如有線、無線通信鏈路或者光纖電纜等等)將采集的信息發(fā)送給車載控制器104。采集設(shè)備102、103可以是采集周圍環(huán)境信息的各種電子設(shè)備,包括但不限于攝像頭、雷達(dá)等等。車載控制器104采用改進的機器人操作系統(tǒng),通過車內(nèi)各節(jié)點的協(xié)同配合,將采集設(shè)備102、103采集的周圍環(huán)境信息和后臺服務(wù)器106提供的地圖信息轉(zhuǎn)化成控制信息,讓汽車平穩(wěn)精確地在道路上行駛。
[0034]需要說明的是,本申請實施例所提供的用于機器人操作系統(tǒng)的消息傳輸方法一般由車載控制器104執(zhí)行,相應(yīng)地,用于機器人操作系統(tǒng)的消息傳輸裝置一般設(shè)置于車載控制器104中。
[0035]應(yīng)該理解,圖1中的采集設(shè)備、無人駕駛車輛和后臺服務(wù)器的數(shù)目僅僅是示意性的。根據(jù)實現(xiàn)需要,可以具有任意數(shù)目的采集設(shè)備、無人駕駛車輛和后臺服務(wù)器。車載控制器也可以單獨運行不需要后臺服務(wù)器和網(wǎng)絡(luò)。
[0036]繼續(xù)參考圖2a,示出了根據(jù)本申請的用于機器人操作系統(tǒng)的消息傳輸方法的一個實施例的流程200。所述的用于機器人操作系統(tǒng)的消息傳輸方法,包括以下步驟:
[0037]步驟201,發(fā)送節(jié)點循環(huán)遍歷查找共享內(nèi)存中的內(nèi)存段中內(nèi)存塊標(biāo)志量的寫入標(biāo)識指示可寫入并且讀取標(biāo)識指示〇值的內(nèi)存塊。
[0038]在本實施例中,用于機器人操作系統(tǒng)的共享消息傳輸方法運行于其上的電子設(shè)備 (例如圖1所示的車載控制器)使用共享內(nèi)存的方式進行消息傳輸。其中,一個內(nèi)存段包括多個內(nèi)存塊,對于每個內(nèi)存塊,內(nèi)存塊標(biāo)志量存儲在該內(nèi)存塊上且包括寫入標(biāo)識和讀取標(biāo)識, 寫入標(biāo)識指示該內(nèi)存塊正在寫入或者可寫入,讀取標(biāo)識指示正在讀取該內(nèi)存塊的接收節(jié)點數(shù)目。每個內(nèi)存塊都有一個編號,發(fā)送節(jié)點在寫入數(shù)據(jù)前循環(huán)遍歷內(nèi)存段中所有內(nèi)存塊,通過內(nèi)存塊標(biāo)志量來判斷是否是允許被寫的內(nèi)存塊。例如,內(nèi)存塊標(biāo)志量的寫入標(biāo)識為〇時表示此時可以寫入,內(nèi)存塊標(biāo)志量的寫入標(biāo)識為1時表示此時有發(fā)送節(jié)點正在寫入。內(nèi)存塊標(biāo)志量的讀取標(biāo)識指示的值的初始值是〇,當(dāng)有接收節(jié)點讀取該內(nèi)存塊時,該值加1,當(dāng)該接收節(jié)點讀取完畢后,該值減1??梢杂卸鄠€接收節(jié)點同時從同一內(nèi)存塊讀取。
[0039]在本實施例的一些可選的實現(xiàn)方式中,內(nèi)存段中還可以包括內(nèi)存段標(biāo)志量,用于存儲上次寫入數(shù)據(jù)的內(nèi)存塊的序號,下次查找可寫入的內(nèi)存塊時可從該序號之后的內(nèi)存塊開始查找。
[0040]步驟202,發(fā)送節(jié)點將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入后向所查找到的內(nèi)存塊寫入數(shù)據(jù)。
[0041]在本實施例中,發(fā)送節(jié)點在寫入數(shù)據(jù)之前需要修改內(nèi)存塊的內(nèi)存塊標(biāo)志量以鎖定共享內(nèi)存,此時其它發(fā)送節(jié)點或接收節(jié)點不會向該內(nèi)存塊寫入數(shù)據(jù)或者從該內(nèi)存塊讀取數(shù)據(jù),這些節(jié)點可以互不干擾地順序讀寫共享內(nèi)存。
[0042]步驟203,發(fā)送節(jié)點在寫入數(shù)據(jù)后將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入、退出所查找到的內(nèi)存塊并通知接收節(jié)點所查找到的內(nèi)存塊可讀。
[0043]在本實施例中,發(fā)送節(jié)點在寫入數(shù)據(jù)后將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入用于釋放共享內(nèi)存以供接收節(jié)點讀取數(shù)據(jù),退出所查找到的內(nèi)存塊并通知接收節(jié)點所查找到的內(nèi)存塊可讀。例如,將內(nèi)存塊標(biāo)志量的寫入標(biāo)識由I改為O以指示該內(nèi)存塊可寫入。
[0044]本申請的上述實施例提供的方法通過在數(shù)據(jù)寫入的過程中使用內(nèi)存塊標(biāo)志量,使想要讀取該內(nèi)存塊的接收節(jié)點進入等待狀態(tài),寫入成功后才允許讀取數(shù)據(jù)。
[0045]繼續(xù)參考圖2b,示出了根據(jù)本申請的用于機器人操作系統(tǒng)的消息傳輸方法的又一個實施例的流程200’。所述的用于機器人操作系統(tǒng)的消息傳輸方法,包括以下步驟:
[0046]步驟210,接收節(jié)點接收發(fā)送節(jié)點發(fā)送的內(nèi)存塊可讀的通知后,判斷內(nèi)存塊可讀的通知所指示的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識是否指示可寫入。
[0047]在本實施例中,共享內(nèi)存中的內(nèi)存段包括多個內(nèi)存塊,對于每個內(nèi)存塊,內(nèi)存塊標(biāo)志量存儲在該內(nèi)存塊上且包括寫入標(biāo)識和讀取標(biāo)識,寫入標(biāo)識指示該內(nèi)存塊正在寫入或者可寫入,讀取標(biāo)識指示正在讀取該內(nèi)存塊的接收節(jié)點數(shù)目。在讀取內(nèi)存塊中的數(shù)據(jù)前,接收節(jié)點收到發(fā)送節(jié)點發(fā)送的內(nèi)存塊可讀的通知后通過檢查內(nèi)存塊標(biāo)志量判斷是否有發(fā)送節(jié)點正在向內(nèi)存中寫入數(shù)據(jù)。若發(fā)現(xiàn)發(fā)送節(jié)點正在寫入數(shù)據(jù),進入等待狀態(tài),直到發(fā)送節(jié)點寫完數(shù)據(jù)才允許讀取。若沒有發(fā)現(xiàn)存在正在寫入數(shù)據(jù)的發(fā)送節(jié)點,或等待到發(fā)送節(jié)點將數(shù)據(jù)與完后進入就緒狀態(tài)。
[0048]步驟211,當(dāng)內(nèi)存塊可讀的通知所指示的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識指示可寫入時,接收節(jié)點將內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加I后從內(nèi)存塊讀取數(shù)據(jù)。
[0049]在本實施例中,處于就緒狀態(tài)的接收節(jié)點修改相應(yīng)的內(nèi)存塊標(biāo)志量,修改成功后讀取內(nèi)存中的數(shù)據(jù)??梢杂卸鄠€接收節(jié)點同時讀取同一個內(nèi)存塊中的數(shù)據(jù)。
[0050]步驟212,接收節(jié)點讀取數(shù)據(jù)后將內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減1、退出內(nèi)存塊并通知發(fā)送節(jié)點內(nèi)存塊可寫入。
[0051]在本實施例中,數(shù)據(jù)讀取完畢后重置內(nèi)存塊標(biāo)志量,退出內(nèi)存塊,并通知發(fā)送節(jié)點該內(nèi)存塊可寫。
[0052]本申請的上述實施例提供的方法通過在數(shù)據(jù)讀取的過程中使用內(nèi)存塊標(biāo)志量,保證了該內(nèi)存塊不會被其他發(fā)送節(jié)點訪問,從而保證了讀取信息的同步。
[0053]繼續(xù)參見圖3,圖3是根據(jù)本實施例的用于機器人操作系統(tǒng)的消息傳輸方法的應(yīng)用場景的一個示意圖。在圖3的應(yīng)用場景中,發(fā)送節(jié)點遍歷查找到可寫的內(nèi)存塊2(內(nèi)存塊標(biāo)志量的寫入標(biāo)識指示可寫入并且讀取標(biāo)識指示O值),將內(nèi)存塊的標(biāo)志量修改為正在寫入以鎖定共享內(nèi)存,然后將數(shù)據(jù)寫入內(nèi)存塊2中,將內(nèi)存塊2的標(biāo)志量重置為可寫入以釋放共享內(nèi)存,退出內(nèi)存塊2并通知接收節(jié)點內(nèi)存塊2可以讀取。在發(fā)送節(jié)點對內(nèi)存塊2進行操作的同時,接收節(jié)點對別的內(nèi)存塊中的數(shù)據(jù)進行讀取。接收節(jié)點收到內(nèi)存塊5可讀取的通知后判斷內(nèi)存塊5的內(nèi)存塊標(biāo)志量的寫入標(biāo)識是否指示可寫入,如果可寫入則將內(nèi)存塊5的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加1后再讀取內(nèi)存塊5中的數(shù)據(jù),數(shù)據(jù)讀取完畢后將內(nèi)存塊5的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減1以釋放共享內(nèi)存。[〇〇54]申請的上述實施例提供的方法通過內(nèi)存塊標(biāo)志量保證了內(nèi)存塊在同一時刻只能被一個發(fā)送節(jié)點寫入或若干個接收節(jié)點讀取,從而達(dá)到了同步發(fā)送-接收節(jié)點的目的。 [〇〇55]進一步參考圖4a,其示出了用于機器人操作系統(tǒng)的消息傳輸方法的又一個實施例的流程400。該用于機器人操作系統(tǒng)的消息傳輸方法的流程400,包括以下步驟:[〇〇56]步驟401,發(fā)送節(jié)點循環(huán)遍歷查找共享內(nèi)存中的內(nèi)存段中內(nèi)存塊標(biāo)志量的寫入標(biāo)識指示可寫入并且讀取標(biāo)識指示〇值的內(nèi)存塊。
[0057] 該步驟與步驟201基本相同,在此不再贅述。[〇〇58]步驟402,對所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖。
[0059]在本實施例中,發(fā)送節(jié)點在將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入之前對所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖。
[0060]數(shù)據(jù)互斥鎖的作用是保證內(nèi)存塊標(biāo)志量的正常使用,由于修改內(nèi)存塊標(biāo)志量屬于非原子操作,所以在內(nèi)存塊標(biāo)志量被一個節(jié)點修改的過程中有可能被其他節(jié)點使用,這就會導(dǎo)致讀寫異常,產(chǎn)生錯誤的指令。為了保證內(nèi)存塊標(biāo)志量在使用的時候不被其他節(jié)點篡改,引入數(shù)據(jù)互斥鎖方法。
[0061]在發(fā)送-接收節(jié)點準(zhǔn)備修改內(nèi)存塊標(biāo)志量時,對這段代碼使用數(shù)據(jù)互斥鎖操作。在同一時刻只能有一個節(jié)點掌握數(shù)據(jù)互斥鎖,擁有上鎖狀態(tài)的節(jié)點能夠?qū)蚕韮?nèi)存進行操作。若其他節(jié)點希望訪問一個已經(jīng)上鎖了的共享內(nèi)存,則該節(jié)點會被掛起,直到上鎖的節(jié)點釋放掉數(shù)據(jù)互斥鎖為止。等到掌握數(shù)據(jù)互斥鎖的節(jié)點修改內(nèi)存塊標(biāo)志量將數(shù)據(jù)互斥鎖釋放后,掛起的節(jié)點才能得到訪問共享內(nèi)存的權(quán)利,訪問時同樣進行上鎖操作,防止其他節(jié)點篡改內(nèi)存塊標(biāo)志量。[〇〇62]步驟403,將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入。
[0063]在本實施例中,在將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖后再對該內(nèi)存塊標(biāo)志量進行修改,將其修改為正在寫入。[〇〇64]步驟404,釋放數(shù)據(jù)互斥鎖。[〇〇65]在本實施例中,修改了內(nèi)存塊標(biāo)志量之后釋放數(shù)據(jù)互斥鎖。[〇〇66] 步驟405,寫入數(shù)據(jù)。[〇〇67]在本實施例中,內(nèi)存塊標(biāo)志量修改為正在寫入之后向該內(nèi)存塊寫入數(shù)據(jù)。[〇〇68]步驟406,對所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖。[〇〇69] 步驟406與步驟402基本相同,在此不再贅述。[〇〇7〇]步驟407,將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入、退出所查找到的內(nèi)存塊并通知接收節(jié)點所查找到的內(nèi)存塊可讀。
[0071]在本實施例中,在對所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖之后將該內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入,退出所查找到的內(nèi)存塊并通知接收節(jié)點所查找到的內(nèi)存塊可讀。[〇〇72]步驟408,釋放數(shù)據(jù)互斥鎖。
[0073]步驟408與步驟404基本相同,在此不再贅述。
[0074]從圖4a中可以看出,與圖2a對應(yīng)的實施例相比,本實施例中的用于機器人操作系統(tǒng)的消息傳輸方法的流程400突出了對內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖的步驟。由此,本實施例描述的方案可以防止其他節(jié)點篡改內(nèi)存塊標(biāo)志量,從而保證整個消息傳輸方法的正確性。
[0075]進一步參考圖4b,其示出了用于機器人操作系統(tǒng)的消息傳輸方法的又一個實施例的流程400’。該用于機器人操作系統(tǒng)的消息傳輸方法的流程400’,包括以下步驟:
[0076]步驟410,接收節(jié)點接收發(fā)送節(jié)點發(fā)送的內(nèi)存塊可讀的通知后,判斷內(nèi)存塊可讀的通知所指示的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識是否指示可寫入。
[0077]步驟410與步驟210基本相同,在此不再贅述。
[0078]步驟411,當(dāng)內(nèi)存塊可讀的通知所指示的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識指示可寫入時對內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖。
[0079]在本實施例中,接收節(jié)點在收到內(nèi)存塊可讀的通知后,根據(jù)該通知中所指示的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識判斷出是否可從該數(shù)據(jù)塊讀取數(shù)據(jù),即,寫入標(biāo)識指示可寫入時,在讀取數(shù)據(jù)前需要修改內(nèi)存塊標(biāo)志量,為了防止內(nèi)存塊標(biāo)志量被其他節(jié)點改成需要在修改標(biāo)志量前對其上數(shù)據(jù)互斥鎖。
[0080]步驟412,將內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加I。
[0081 ]在本實施例中,內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識的初始值為O,當(dāng)有接收節(jié)點讀取數(shù)據(jù)時該值加I,可以有多個接收節(jié)點同時讀取該內(nèi)存塊中的數(shù)據(jù),因此該內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值根據(jù)讀取該內(nèi)存塊的接收節(jié)點數(shù)累加。
[0082]步驟413,釋放數(shù)據(jù)互斥鎖。
[0083]在本實施例中,修改了內(nèi)存塊標(biāo)志量之后釋放數(shù)據(jù)互斥鎖。
[0084]步驟414,接收節(jié)點讀取數(shù)據(jù)。
[0085]在本實施例中,接收節(jié)點在修改了內(nèi)存塊標(biāo)志量之后讀取數(shù)據(jù)。
[0086]步驟415,對內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖。
[0087]在本實施例中,在讀取數(shù)據(jù)之后需要修改內(nèi)存塊的內(nèi)存塊標(biāo)志量,為了防止內(nèi)存塊標(biāo)志量被其他節(jié)點改成需要在修改標(biāo)志量前對其上數(shù)據(jù)互斥鎖。
[0088]步驟416,將內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減1、退出內(nèi)存塊并通知發(fā)送節(jié)點內(nèi)存塊可寫入。
[0089]在本實施例中,在讀取數(shù)據(jù)之后需要將內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減I,如果此時所有接收節(jié)點都讀取完數(shù)據(jù),則該內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值為0,此時該內(nèi)存塊的資料被釋放,接收節(jié)點退出內(nèi)存塊并通知發(fā)送節(jié)點內(nèi)存塊可寫入。
[0090]步驟417,釋放數(shù)據(jù)互斥鎖。
[0091 ]在本實施例中,修改了內(nèi)存塊標(biāo)志量之后釋放數(shù)據(jù)互斥鎖。
[0092]從圖4b中可以看出,與圖2b對應(yīng)的實施例相比,本實施例中的用于機器人操作系統(tǒng)的消息傳輸方法的流程400’突出了對內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖的步驟。由此,本實施例描述的方案可以防止其他節(jié)點篡改內(nèi)存塊標(biāo)志量,從而保證整個消息傳輸方法的正確性。
[0093]進一步參考圖5a,作為對上述各圖所示方法的實現(xiàn),本申請?zhí)峁┝艘环N用于機器人操作系統(tǒng)的消息傳輸裝置的一個實施例,該裝置實施例與圖2a所示的方法實施例相對應(yīng),該裝置具體可以應(yīng)用于各種電子設(shè)備中。
[0094]如圖5a所示,本實施例所述的用于機器人操作系統(tǒng)的消息傳輸裝置500包括:查找單元501、寫入單元502和讀取通知單元503。其中,查找單元501配置用于循環(huán)遍歷查找共享內(nèi)存中的內(nèi)存段中內(nèi)存塊標(biāo)志量的寫入標(biāo)識指示可寫入并且讀取標(biāo)識指示O值的內(nèi)存塊,一個內(nèi)存段包括多個內(nèi)存塊,其中,對于每個內(nèi)存塊,內(nèi)存塊標(biāo)志量存儲在該內(nèi)存塊上且包括寫入標(biāo)識和讀取標(biāo)識,寫入標(biāo)識指示該內(nèi)存塊正在寫入或者可寫入,讀取標(biāo)識指示正在讀取該內(nèi)存塊的接收節(jié)點數(shù)目;寫入單元502配置用于將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入后向所查找到的內(nèi)存塊寫入數(shù)據(jù);讀取通知單元503配置用于在寫入數(shù)據(jù)后將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入、退出所查找到的內(nèi)存塊并通知接收節(jié)點所查找到的內(nèi)存塊可讀。
[0095]在本實施例的一些可選的實現(xiàn)方式中,寫入單元502進一步配置用于:在將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入之前對所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖;在將所述內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入之后釋放所述數(shù)據(jù)互斥鎖。
[0096]在本實施例的一些可選的實現(xiàn)方式中,讀取通知單元503進一步配置用于:在將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入之前對所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖;在將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入之后釋放所述數(shù)據(jù)互斥鎖。
[0097]進一步參考圖5b,作為對上述各圖所示方法的實現(xiàn),本申請?zhí)峁┝艘环N用于機器人操作系統(tǒng)的消息傳輸裝置的一個實施例,該裝置實施例與圖2b所示的方法實施例相對應(yīng),該裝置具體可以應(yīng)用于各種電子設(shè)備中。
[0098]如圖5b所示,本實施例所述的用于機器人操作系統(tǒng)的消息傳輸裝置500’包括:接收單元511、讀取單元512和寫入通知單元513。其中,接收單元511配置用于接收發(fā)送節(jié)點發(fā)送的內(nèi)存塊可讀的通知后,判斷所述內(nèi)存塊可讀的通知所指示的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識是否指示可寫入,其中,對于每個內(nèi)存塊,內(nèi)存塊標(biāo)志量存儲在該內(nèi)存塊上且包括寫入標(biāo)識和讀取標(biāo)識,寫入標(biāo)識指示該內(nèi)存塊正在寫入或者可寫入,讀取標(biāo)識指示正在讀取該內(nèi)存塊的接收節(jié)點數(shù)目;讀取單元512配置用于當(dāng)所述內(nèi)存塊可讀的通知所指示的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識指示可寫入時,將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加I后從所述內(nèi)存塊讀取數(shù)據(jù);寫入通知單元513配置用于讀取數(shù)據(jù)后將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減1、退出所述內(nèi)存塊并通知發(fā)送節(jié)點所述內(nèi)存塊可寫入。
[0099]在本實施例的一些可選的實現(xiàn)方式中,讀取單元512進一步配置用于:在將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加I之前對所述內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖;在將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加I之后釋放所述數(shù)據(jù)互斥鎖。
[0100]在本實施例的一些可選的實現(xiàn)方式中,寫入通知單元513進一步配置用于:在將所述內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減I之前對所述內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖;在將所述內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減I之后釋放所述數(shù)據(jù)互斥鎖。
[0101]下面參考圖6,其示出了適于用來實現(xiàn)本申請實施例的終端設(shè)備的計算機系統(tǒng)600 的結(jié)構(gòu)示意圖。
[0102]如圖6所示,計算機系統(tǒng)600包括中央處理單元(CPU)601,其可以根據(jù)存儲在只讀存儲器(R0M)602中的程序或者從存儲部分608加載到隨機訪問存儲器(RAM)603中的程序而執(zhí)行各種適當(dāng)?shù)膭幼骱吞幚?。在RAM 603中,還存儲有系統(tǒng)600操作所需的各種程序和數(shù)據(jù)。 CPU 601、R0M 602以及RAM 603通過總線604彼此相連。輸入/輸出(I/O)接口605也連接至總線 604。[〇1〇3]以下部件連接至I/O接口 605:包括鍵盤、鼠標(biāo)等的輸入部分606;包括諸如液晶顯示器(IXD)等以及揚聲器等的輸出部分607;包括硬盤等的存儲部分608;以及包括諸如LAN 卡、調(diào)制解調(diào)器等的網(wǎng)絡(luò)接口卡的通信部分609。通信部分609經(jīng)由諸如因特網(wǎng)的網(wǎng)絡(luò)執(zhí)行通信處理。驅(qū)動器610也根據(jù)需要連接至I/O接口 605??刹鹦督橘|(zhì)611,諸如磁盤、光盤、磁光盤、半導(dǎo)體存儲器等等,根據(jù)需要安裝在驅(qū)動器610上,以便于從其上讀出的計算機程序根據(jù)需要被安裝入存儲部分608。
[0104]特別地,根據(jù)本公開的實施例,上文參考流程圖描述的過程可以被實現(xiàn)為計算機軟件程序。例如,本公開的實施例包括一種計算機程序產(chǎn)品,其包括有形地包含在機器可讀介質(zhì)上的計算機程序,所述計算機程序包含用于執(zhí)行流程圖所示的方法的程序代碼。在這樣的實施例中,該計算機程序可以通過通信部分609從網(wǎng)絡(luò)上被下載和安裝,和/或從可拆卸介質(zhì)611被安裝。在該計算機程序被中央處理單元(CPU)601執(zhí)行時,執(zhí)行本申請的方法中限定的上述功能。
[0105]附圖中的流程圖和框圖,圖示了按照本申請各種實施例的系統(tǒng)、方法和計算機程序產(chǎn)品的可能實現(xiàn)的體系架構(gòu)、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段、或代碼的一部分,所述模塊、程序段、或代碼的一部分包含一個或多個用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個接連地表示的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機指令的組合來實現(xiàn)。
[0106]描述于本申請實施例中所涉及到的單元可以通過軟件的方式實現(xiàn),也可以通過硬件的方式來實現(xiàn)。所描述的單元也可以設(shè)置在處理器中,例如,可以描述為:一種處理器包括查找單元、寫入單元和讀取通知單元。其中,這些單元的名稱在某種情況下并不構(gòu)成對該單元本身的限定,例如,查找單元還可以被描述為“循環(huán)遍歷查找共享內(nèi)存中的內(nèi)存段中內(nèi)存塊標(biāo)志量的寫入標(biāo)識指示可寫入并且讀取標(biāo)識指示〇值的內(nèi)存塊的單元”。
[0107]作為另一方面,本申請還提供了一種非易失性計算機存儲介質(zhì),該非易失性計算機存儲介質(zhì)可以是上述實施例中所述裝置中所包含的非易失性計算機存儲介質(zhì);也可以是單獨存在,未裝配入終端中的非易失性計算機存儲介質(zhì)。上述非易失性計算機存儲介質(zhì)存儲有一個或者多個程序,當(dāng)所述一個或者多個程序被一個設(shè)備執(zhí)行時,使得所述設(shè)備:發(fā)送節(jié)點循環(huán)遍歷查找共享內(nèi)存中的內(nèi)存段中內(nèi)存塊標(biāo)志量的寫入標(biāo)識指示可寫入并且讀取標(biāo)識指示〇值的內(nèi)存塊,一個內(nèi)存段包括多個內(nèi)存塊,其中,對于每個內(nèi)存塊,內(nèi)存塊標(biāo)志量存儲在該內(nèi)存塊上且包括寫入標(biāo)識和讀取標(biāo)識,寫入標(biāo)識指示該內(nèi)存塊正在寫入或者可寫入,讀取標(biāo)識指示正在讀取該內(nèi)存塊的接收節(jié)點數(shù)目;所述發(fā)送節(jié)點將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入后向所查找到的內(nèi)存塊寫入數(shù)據(jù);所述發(fā)送節(jié)點在寫入數(shù)據(jù)后將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入、 退出所查找到的內(nèi)存塊并通知接收節(jié)點所查找到的內(nèi)存塊可讀?;蛘呱鲜龇且资杂嬎銠C存儲介質(zhì)存儲有一個或者多個程序,當(dāng)所述一個或者多個程序被一個設(shè)備執(zhí)行時,使得所述設(shè)備:接收節(jié)點接收發(fā)送節(jié)點發(fā)送的內(nèi)存塊可讀的通知后,判斷所述內(nèi)存塊可讀的通知所指示的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識是否指示可寫入,其中,共享內(nèi)存中的內(nèi)存段包括多個內(nèi)存塊,對于每個內(nèi)存塊,內(nèi)存塊標(biāo)志量存儲在該內(nèi)存塊上且包括寫入標(biāo)識和讀取標(biāo)識,寫入標(biāo)識指示該內(nèi)存塊正在寫入或者可寫入,讀取標(biāo)識指示正在讀取該內(nèi)存塊的接收節(jié)點數(shù)目;當(dāng)所述內(nèi)存塊可讀的通知所指示的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識指示可寫入時,所述接收節(jié)點將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加1后從所述內(nèi)存塊讀取數(shù)據(jù);所述接收節(jié)點讀取數(shù)據(jù)后將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減1、退出所述內(nèi)存塊并通知發(fā)送節(jié)點所述內(nèi)存塊可寫入。
[0108]以上描述僅為本申請的較佳實施例以及對所運用技術(shù)原理的說明。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,本申請中所涉及的發(fā)明范圍,并不限于上述技術(shù)特征的特定組合而成的技術(shù)方案,同時也應(yīng)涵蓋在不脫離所述發(fā)明構(gòu)思的情況下,由上述技術(shù)特征或其等同特征進行任意組合而形成的其它技術(shù)方案。例如上述特征與本申請中公開的(但不限于)具有類似功能的技術(shù)特征進行互相替換而形成的技術(shù)方案。
【主權(quán)項】
1.一種用于機器人操作系統(tǒng)的消息傳輸方法,其特征在于,所述方法包括: 發(fā)送節(jié)點循環(huán)遍歷查找共享內(nèi)存中的內(nèi)存段中內(nèi)存塊標(biāo)志量的寫入標(biāo)識指示可寫入并且讀取標(biāo)識指示O值的內(nèi)存塊,一個內(nèi)存段包括多個內(nèi)存塊,其中,對于每個內(nèi)存塊,內(nèi)存塊標(biāo)志量存儲在該內(nèi)存塊上且包括寫入標(biāo)識和讀取標(biāo)識,寫入標(biāo)識指示該內(nèi)存塊正在寫入或者可寫入,讀取標(biāo)識指示正在讀取該內(nèi)存塊的接收節(jié)點數(shù)目; 所述發(fā)送節(jié)點將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入后向所查找到的內(nèi)存塊寫入數(shù)據(jù); 所述發(fā)送節(jié)點在寫入數(shù)據(jù)后將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入、退出所查找到的內(nèi)存塊并通知接收節(jié)點所查找到的內(nèi)存塊可讀。2.根據(jù)權(quán)利要求1所述的用于機器人操作系統(tǒng)的消息傳輸方法,其特征在于,所述發(fā)送節(jié)點將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入后向所查找到的內(nèi)存塊寫入數(shù)據(jù),包括: 所述發(fā)送節(jié)點在將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入之前對所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖; 所述發(fā)送節(jié)點在將所述內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入之后釋放所述數(shù)據(jù)互斥鎖。3.根據(jù)權(quán)利要求1或2所述的用于機器人操作系統(tǒng)的消息傳輸方法,其特征在于,所述發(fā)送節(jié)點在寫入數(shù)據(jù)后將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入,包括: 所述發(fā)送節(jié)點在將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入之前對所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖; 所述發(fā)送節(jié)點在將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入之后釋放所述數(shù)據(jù)互斥鎖。4.一種用于機器人操作系統(tǒng)的消息傳輸方法,其特征在于,所述方法包括: 接收節(jié)點接收發(fā)送節(jié)點發(fā)送的內(nèi)存塊可讀的通知后,判斷所述內(nèi)存塊可讀的通知所指示的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識是否指示可寫入,其中,共享內(nèi)存中的內(nèi)存段包括多個內(nèi)存塊,對于每個內(nèi)存塊,內(nèi)存塊標(biāo)志量存儲在該內(nèi)存塊上且包括寫入標(biāo)識和讀取標(biāo)識,寫入標(biāo)識指示該內(nèi)存塊正在寫入或者可寫入,讀取標(biāo)識指示正在讀取該內(nèi)存塊的接收節(jié)點數(shù)目; 當(dāng)所述內(nèi)存塊可讀的通知所指示的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識指示可寫入時,所述接收節(jié)點將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加I后從所述內(nèi)存塊讀取數(shù)據(jù); 所述接收節(jié)點讀取數(shù)據(jù)后將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減1、退出所述內(nèi)存塊并通知發(fā)送節(jié)點所述內(nèi)存塊可寫入。5.根據(jù)權(quán)利要求4所述的用于機器人操作系統(tǒng)的消息傳輸方法,其特征在于,所述接收節(jié)點將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加I后從所述內(nèi)存塊讀取數(shù)據(jù),包括: 所述接收節(jié)點在將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加I之前對所述內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖;所述接收節(jié)點在將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加1之后釋放所 述數(shù)據(jù)互斥鎖。6.根據(jù)權(quán)利要求4或5所述的用于機器人操作系統(tǒng)的消息傳輸方法,其特征在于,所述 接收節(jié)點讀取數(shù)據(jù)后將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減1,包括:所述接收節(jié)點在將所述內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減1之前對所述內(nèi)存塊的 內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖;所述接收節(jié)點在將所述內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減1之后釋放所述數(shù)據(jù)互 斥鎖。7.—種用于機器人操作系統(tǒng)的消息傳輸裝置,其特征在于,所述裝置包括:查找單元,配置用于循環(huán)遍歷查找共享內(nèi)存中的內(nèi)存段中內(nèi)存塊標(biāo)志量的寫入標(biāo)識指 示可寫入并且讀取標(biāo)識指示〇值的內(nèi)存塊,一個內(nèi)存段包括多個內(nèi)存塊,其中,對于每個內(nèi) 存塊,內(nèi)存塊標(biāo)志量存儲在該內(nèi)存塊上且包括寫入標(biāo)識和讀取標(biāo)識,寫入標(biāo)識指示該內(nèi)存 塊正在寫入或者可寫入,讀取標(biāo)識指示正在讀取該內(nèi)存塊的接收節(jié)點數(shù)目;寫入單元,配置用于將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在 寫入后向所查找到的內(nèi)存塊寫入數(shù)據(jù);讀取通知單元,配置用于在寫入數(shù)據(jù)后將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo) 識重置為指示可寫入、退出所查找到的內(nèi)存塊并通知接收節(jié)點所查找到的內(nèi)存塊可讀。8.根據(jù)權(quán)利要求7所述的用于機器人操作系統(tǒng)的消息傳輸裝置,其特征在于,所述寫入 單元進一步配置用于:在將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入之前對所查 找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖;在將所述內(nèi)存塊標(biāo)志量的寫入標(biāo)識修改為指示正在寫入之后釋放所述數(shù)據(jù)互斥鎖。9.根據(jù)權(quán)利要求7或8所述的用于機器人操作系統(tǒng)的消息傳輸裝置,其特征在于,所述 讀取通知單元進一步配置用于:在將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入之前對所查找 到的內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖;在將所查找到的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識重置為指示可寫入之后釋放所述 數(shù)據(jù)互斥鎖。10.—種用于機器人操作系統(tǒng)的消息傳輸裝置,其特征在于,所述裝置包括:接收單元,配置用于接收發(fā)送節(jié)點發(fā)送的內(nèi)存塊可讀的通知后,判斷所述內(nèi)存塊可讀 的通知所指示的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入標(biāo)識是否指示可寫入,其中,對于每個內(nèi)存 塊,內(nèi)存塊標(biāo)志量存儲在該內(nèi)存塊上且包括寫入標(biāo)識和讀取標(biāo)識,寫入標(biāo)識指示該內(nèi)存塊 正在寫入或者可寫入,讀取標(biāo)識指示正在讀取該內(nèi)存塊的接收節(jié)點數(shù)目;讀取單元,配置用于當(dāng)所述內(nèi)存塊可讀的通知所指示的內(nèi)存塊的內(nèi)存塊標(biāo)志量的寫入 標(biāo)識指示可寫入時,將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加1后從所述內(nèi) 存塊讀取數(shù)據(jù);寫入通知單元,配置用于讀取數(shù)據(jù)后將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示 的值減1、退出所述內(nèi)存塊并通知發(fā)送節(jié)點所述內(nèi)存塊可寫入。11.根據(jù)權(quán)利要求10所述的用于機器人操作系統(tǒng)的消息傳輸裝置,其特征在于,所述讀取單元進一步配置用于: 在將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加I之前對所述內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖; 在將所述內(nèi)存塊的內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值加I之后釋放所述數(shù)據(jù)互斥鎖。12.根據(jù)權(quán)利要求10或11所述的用于機器人操作系統(tǒng)的消息傳輸裝置,其特征在于,所述寫入通知單元進一步配置用于: 在將所述內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減I之前對所述內(nèi)存塊的內(nèi)存塊標(biāo)志量上數(shù)據(jù)互斥鎖; 在將所述內(nèi)存塊標(biāo)志量的讀取標(biāo)識所指示的值減I之后釋放所述數(shù)據(jù)互斥鎖。
【文檔編號】G06F9/54GK106055417SQ201610390281
【公開日】2016年10月26日
【申請日】2016年6月2日
【發(fā)明人】馮靖超, 夏黎明, 王全, 曲寧, 陳卓
【申請人】北京百度網(wǎng)訊科技有限公司