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:
#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());