天天看點

RTI_DDS自定義插件開發 5 專屬區域(_xxEA)

    你已經注意到,這必須由交通運輸插件實作的API函數的名稱有一個神秘的字尾,或者_rEA,_srEA,_rrEA或_cEA。實際上,唯一沒有的就是這個send()功能。這些字尾用于訓示NDDS在調用函數時保證的多線程安全級别,以便可以簡化插件實作這些函數。

    該_xxEA字尾用于訓示如何的功能被劃分成不同的多線程安全組或獨占 領域。

    由于NDDS核心是多線程的,是以多個線程可能同時調用傳輸插件執行個體的API。然而,NDDS的設計是這樣的,這種行為是明确的。函數已經組合在一起成為“專用區域(EAs)”,以便NDDS保證同一EA中的函數将以單線程方式(通常針對某些資料)被調用。

    由于NDDS本身已經具有信号量和互斥體來防止EA内的多線程互動,是以Transport-Plugin實作者可以利用該設計,并且隻有在不同EA中的函數之間可能存在傳輸特定的多線程互動時才建立信号量或互斥量。

    首先,所有EA都适用于Transport Plugin的執行個體。相同的Transport Plugin類的不同執行個體之間不提供任何保證。已定義的EA是

    _rEA- receive_rEA(),return_loaned_buffer_rEA()。

“r”代表接收。相同的RecvResource不會同時調用這兩個函數。

_cEA(),get_class_name_cEA(),string_to_address_cEA(),get_receive_interfaces_cEA(),register_listener_cEA() delete_cEA()

“c”代表配置。傳輸插件的同一個執行個體不會同時調用這些函數。

_rrEA-,unblock_receive_rrEA(),create_recvresource_rrEA(),destroy_recvresource_rrEA(),share_recvresource_rrEA() unshare_recvresource_rrEA()

“rr”代表RecvResource。相同的RecvResource不會同時調用這些函數。

_srEA-,create_sendresource_srEA(),destroy_sendresource_srEA(),share_sendresource_srEA() unshare_sendresource_srEA()

“sr”代表SendResource。對于相同的SendResource,這些函數不會被同時調用。

繼續閱讀