====== 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());