neurali:shared_memory
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
neurali:shared_memory [2015/08/10 11:13] – created profpro | neurali:shared_memory [2020/06/08 22:20] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Shared memory ====== | ||
+ | http:// | ||
+ | |||
+ | ===== 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 < | ||
+ | using boost:: | ||
+ | // la creazione potrebbe lanciare eccezione se già esiste | ||
+ | shared_memory_object shm_obj(create_only," | ||
+ | shm_obj.truncate(1000); | ||
+ | </ | ||
+ | |||
+ | |||
+ | <code cpp> | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | std::size_t ShmSize = 1000; | ||
+ | |||
+ | mapped_region region | ||
+ | ( shm_obj | ||
+ | , read_write | ||
+ | , 0 //Offset from the beginning of shm | ||
+ | , ShmSize | ||
+ | ); | ||
+ | |||
+ | std:: | ||
+ | </ | ||
+ | |||
+ | |||
+ | <code cpp> | ||
+ | // la rimozione potrebbe lanciare eccezione se memoria in uso da altri | ||
+ | shared_memory_object:: | ||
+ | </ | ||
+ | |||
+ | Altro accesso alla memoria precedentemente condivisa | ||
+ | |||
+ | <code cpp> | ||
+ | shared_memory_object shm_obj(open_only," | ||
+ | const char *p = static_cast< | ||
+ | </ |