Shared memory

http://www.boost.org/doc/libs/1_38_0/doc/html/interprocess/sharedmemorybetweenprocesses.html

Boost.Interprocess

La memoria condivisa permette la comunicazione tra processi senza intervento del sistema operativo, come accadebbre se si usasse una file mappato in memoria. Questo sistema di comunicazione è quindi più veloce, ma richiede la sincronizzazione tra i processi che utilizzano la memoria condivisa.

Operazioni:

  1. creare un oggetto shared memory, grazie al sistema operativo
  2. impostare la sua dimensione
  3. associare la shared memory allo spazio degli indirizzi del processo che ne ha fatto richiesta, e anche ad altri processi che ne faranno richiesta.
  4. inizializzazione della memoria a zero
  5. liberare la memoria
  #include <boost/interprocess/shared_memory_object.hpp>
  using boost::interprocess;
   // la creazione potrebbe lanciare eccezione se già esiste
  shared_memory_object shm_obj(create_only,"shared_memory",read_write);
  shm_obj.truncate(1000); // dimensione della memoria condivisa
  #include <boost/interprocess/mapped_region.hpp>
  #include <iostream>
  #include <cstring>
 
  std::size_t ShmSize = 1000;
 
  mapped_region region
   ( shm_obj                  //Memory-mappable object
   , read_write               //Access mode
   , 0                //Offset from the beginning of shm
   , ShmSize        //Length of the region
   );
 
  std::memset(region.get_address(), 0, region.get_size());
  // la rimozione potrebbe lanciare eccezione se memoria in uso da altri
  shared_memory_object::remove("shared_memory");

Altro accesso alla memoria precedentemente condivisa

  shared_memory_object shm_obj(open_only,"shared_memory",read_only);
  const char *p = static_cast<char*>(region.get_address());