Tengo una memoria compartida entre procesos múltiples que interpenetra la memoria de cierta manera. Ex:Acceso atómico a la memoria compartida
DataBlock {
int counter;
double value1;
double ... }
Lo que quiero es que el contador se actualizará/incrementa de forma atómica. Y para que ocurra un lanzamiento de memoria en esa dirección. Si yo interrumpía el uso de memoria compartida, por ejemplo, sería algo así como
std::atomic<int> counter;
atomic_store(counter, newvalue, std::memory_order_release); // perform release operation on the affected memory location making the write visible to other threads
¿Cómo logro esto para una ubicación de memoria aleatoria (interpretado como DataBlock contador> arriba). Puedo garantizar que la dirección esté alineada según lo requerido por la arquitectura (x86 linux)
- Haga la actualización atomic - ¿cómo? (es decir, atomicupdate (addr, newvalue))
- Sincronización de memoria para multinúcleo - (es decir, memorysync (addr)) - la única forma que puedo ver es usar std :: atomic_thread_fence (std :: memory_order_release) - pero esto "establecerá la memoria orden de sincronización de TODAS las tiendas atómicas y relajadas "- eso es exagerado para mí - Solo quiero que la ubicación del contador esté sincronizada. Aprecie cualquier pensamiento.
Solo estoy especulando, pero tengo la impresión de que el modelo de programación C++ no tiene noción de "procesos" y el modelo de memoria no tiene noción de "memoria compartida", por lo que dudo que el estándar en sí cualquier garantia La memoria compartida es en gran medida una función dependiente de la plataforma, por lo tanto, consulte la documentación de su plataforma. –
¿puedes poner un 'atomic' en tu DataBlock? Eso debería funcionar siempre que 'atomic ' no esté bloqueado (el estándar explícito menciona memoria compartida entre procesos como un caso de uso para esos). Y no, no se puede simplemente obtener un atómico para una dirección aleatoria (ver http://stackoverflow.com/questions/8749038/how-to-use-stdatomic-efficiently/8749474) @Kerrek SB: en realidad ese escenario se menciona en [atomics.lockfree] en el borrador final. –
Grizzly
@Grizzly: ¿Te refieres a la nota no normativa 29.4/3? Muy interesante, no lo sabía. –