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,这些函数不会被同时调用。



猜你喜欢

转载自blog.csdn.net/xinqingwuji/article/details/79938516