¿Cuál es la mejor manera de crear una estructura de datos basada en valores clave en C ++ que admita memoria compartida entre procesos usando C ++ 11?

(Supongo que está hablando de un sistema operativo donde los procesos se ejecutan en diferentes espacios de direcciones virtuales). Este era un problema que estaba viendo hace muchos años, pero no implementé completamente una solución. Pensé que el mejor enfoque era crear un asignador compatible con STL que asignara memoria compartida. Esto fue parte de lo que me motivó a escribir este asignador de memoria dinámica de código abierto, altamente portátil / configurable, de mejor ajuste y razonablemente rápido: el Administrador de memoria de montón. Pero nunca llegué a intentar configurarlo para la memoria compartida de UNIX y envolverlo para la compatibilidad STL. (Puedo aplicar una licencia MIT si la necesita. También puede obtenerla de versiones anteriores de Chromium y Android con esa licencia. Está en el códec de video del software WebM. Sugiero que no se infle objetos como Google, al vincular en todos los archivos, independientemente de si se utilizaron. Si la memoria de su teléfono Android anterior es escasa, lo siento, no me culpe).

Si esto le parece una posibilidad, tenga en cuenta que este asignador no es seguro para subprocesos, por lo que el envoltorio necesitaría protegerlo con un mutex. Y debe usar la herencia prioritaria si es posible. Si su objetivo es un procesador multinúcleo, puede valer la pena buscar un asignador o estructuras de datos que utilicen técnicas sin bloqueo y / o minimicen secciones críticas.

Si desea evitar la sobrecarga de la asignación dinámica de propósito general, hay un árbol binario balanceado AVL, una tabla hash y una selección de funciones hash en esta biblioteca de contenedores intrusivos: wkaras / C-plus-plus-intrusive-container -templates. Pero nuevamente, este código no es seguro para subprocesos y necesitaría protección mutex idealmente con herencia prioritaria.

Una vez estuve en una situación similar, pero en un proyecto comercial, así que no podía simplemente decirles que estaban siendo estúpidos y hacer un tenedor que usa impulso.

Así que mal volví a implementar un subconjunto de boost.interprocess. Fue una gran experiencia de aprendizaje, si estás preparado para la tarea: muy pocos programadores de C ++ saben lo que es un puntero elegante.

Hola, leí tu pregunta. El STL tiene muchas estructuras de datos que están ‘integradas’ en C ++. Un almacén de valores clave sería un contenedor asociativo. Ya sea que desee implementar o no el valor-clave en sí mismo o crear el suyo propio, sería para usted. En términos generales, implementa un mapa.

También podría implementar múltiples barriles, o un conjunto para guardar sus claves y muchas otras estructuras de datos, con un orden cronológico de las estructuras de datos. De esa forma, la posición de índice de cada estructura de datos se correlacionará adecuadamente con las posiciones de índice de las claves almacenadas en el conjunto. Pero lo más probable es que un mapa funcione.

#include

More Interesting

¿Cómo se puede predecir el rango basado en el rango anterior y los datos de puntaje disponibles?

¿Qué es un algoritmo eficiente para el agrupamiento k-means donde k es 2 y la dimensión es una, con o sin pesos?

Dado un conjunto etiquetado de nodos, ¿podemos 'siempre' construir un árbol de búsqueda binario (BST) para ellos?

Quiero comparar una consulta con varios documentos y asignarles una clasificación. ¿Qué algoritmo necesito usar?

¿La programación competitiva se trata más de pensar o de implementar (modificar) algoritmos conocidos?

Cómo resolver el problema de cambio de UVa 166 si tenemos una oferta limitada de cada denominación

¿Necesitamos un algoritmo 10 veces más rápido o una máquina 10 veces más rápida? Da una razón para justificar tu respuesta.

¿Qué debo usar para reducir los atributos en mi conjunto de datos, PCA o algoritmos de selección de características?

¿Cómo se escribe un programa que verifica todas las permutaciones de una cadena determinada y determina si es un palíndromo?

¿Cómo mantiene Google en secreto su algoritmo de sus empleados cuando son sus empleados quienes lo prueban?

¿Existe un algoritmo para contar el número de subsecuencias divisibles por 8?

Cómo encontrar todos los palíndromos posibles que se pueden generar usando las letras de una cadena dada

¿De dónde debería comenzar a aprender el algoritmo? ¿Debería unirme a uno de los MOOC disponibles o leer libros como 'Introducción a los algoritmos'?

Cómo encontrar el número máximo de árboles de expansión mínima en un gráfico

Cómo implementar el algoritmo de similitud de oraciones