This is an old revision of the document!


Shared memory

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");
shared_memory_object shm_obj(open_only,"shared_memory",read_only);
const char *p = static_cast<char*>(region.get_address());
  • neurali/shared_memory.1439199212.txt.gz
  • Last modified: 2018/04/25 11:42
  • (external edit)