User Tools

Site Tools


neurali:shared_memory

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
neurali:shared_memory [2015/08/10 11:29] profproneurali:shared_memory [2020/06/08 22:20] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +====== 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
 +
 +<code cpp>
 +  #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
 +</code>
 +
 +
 +<code cpp>
 +  #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());
 +</code>
 +
 +
 +<code cpp>
 +  // la rimozione potrebbe lanciare eccezione se memoria in uso da altri
 +  shared_memory_object::remove("shared_memory");
 +</code>
 +
 +Altro accesso alla memoria precedentemente condivisa
 +
 +<code cpp>
 +  shared_memory_object shm_obj(open_only,"shared_memory",read_only);
 +  const char *p = static_cast<char*>(region.get_address());
 +</code>
neurali/shared_memory.txt · Last modified: 2020/06/08 22:20 by 127.0.0.1