How many Domain Participants can be created in a single address space?
Note: Relevant RTI Connext versions: RTI Connext 4.x and above
The default settings for RTI Connext 4.x and above will allow approximately 11 (5 for 4.4c and below) domain participants in a single application (address space). The number of domain participants on a given node is only limited by system resources.
If you run out of thread-specific objects, you may see this error message:
PRESPsService_new:!create worker-specific object
Note: A worker in this case can be thought of as a thread.
or this error message:
RTIOsapiSharedMemoryMutex_create:OS semget() failure, error 0x1C
If you need more than 11 (5 for 4.4c and below) domain participants in an application:
The DomainParticipantFactory's SystemResourceLimits QoS Policy controls how much memory is allocated for thread-specific objects (i.e., thread-specific data in POSIX terminology). For example, to fix the problem under C++, add the following to the beginning of your code, before calling any other RTI Connext APIs:
DDS_DomainParticipantFactoryQos factoryQoS; DDSTheParticipantFactory->get_qos(factoryQoS); /* increase max_objects_per_thread as needed. * The default is 1024 (512 for 4.4c and below). */ factoryQoS.resource_limits.max_objects_per_thread = 2048; DDSTheParticipantFactory->set_qos(factoryQoS);
You should be able to create about 30 participants with the above setting.
Note that in RTI DDS 4.0g, the corresponding Java API for the SystemResourceLimits QoS was non-functional. This was corrected in 4.0i.