====== 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:
- creare un oggetto shared memory, grazie al sistema operativo
- impostare la sua dimensione
- associare la shared memory allo spazio degli indirizzi del processo che ne ha fatto richiesta, e anche ad altri processi che ne faranno richiesta.
- inizializzazione della memoria a zero
- liberare la memoria
#include
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
#include
#include
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(region.get_address());