User Tools

Site Tools


neurali:shared_memory

Shared memory

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());
neurali/shared_memory.txt · Last modified: 2020/06/08 22:20 (external edit)