I have created a shared memory segment with the boost::interprocess library and have created and populated a boost::interprocess::map in that segment.  The key for the map is the boost::interprocess::string class.

If I want to search for an element in the map I obviously have to supply the key for the element. Here is what I do:

{
        std::string key;
        // assign here a value to key string object

        const Char_Alloc char_alloc( (shared_memory_segment_obj.get_segment_manager() ) );
        boost::interprocess::string some_string( char_alloc );

        some_string.assign( key.c_str() );
}

where Char_Alloc is a suitable shared memory allocator for plain characters.

As you can see from the code the key (the some_string object) for the map is created in local memory (in-process memory) but the contents of the string are allocated in shared memory.

If two threads access this shared memory segment and execute the above code at the same time, is this thread safe? Will the two concurrent assign() statements use the same location in shared memory and cause overlaps? Or is the shared memory allocator smart enough to synchronize the two assign() calls and execute them sequencially?

In case the shared memory allocator is not smart enough to guarantee synchronization can I use a boost::interprocess mutex for thread synchronization?


Regards,
Markos Perrakis


--------------------------------------
NOTICE OF CONFIDENTIALITY
This e-mail, including all materials contained in or attached to this e-mail, contains proprietary and confidential information solely for the internal use of the intended recipient. If you have received this email in error, please notify us immediately by return e-mail or otherwise and ensure that it is permanently deleted from your systems, and do not print, copy, distribute or read its contents.

AVIS DE CONFIDENTIALITÉ
Le présent courriel, y compris tous les documents qu'il contient ou qui y sont joints, renferme des renseignements exclusifs et confidentiels destinés uniquement à l'usage interne du destinataire prévu. Si vous avez reçu le présent courriel par erreur, veuillez nous aviser immédiatement, notamment par retour de courriel, et vous assurer qu'il est supprimé de façon permanente de vos systèmes; veuillez également vous abstenir d'imprimer, de copier, de distribuer ou de lire son contenu.