Estoy intentando diseñar/implementar una cola (circular) (en C) como una memoria compartida para que pueda compartirse entre múltiples hilos/procesos.Diseñar una cola para que sea una memoria compartida
La estructura de colas es como sigue:
typedef struct _q {
int q_size;
int q_front;
int q_rear;
int *q_data;
}queue;
que soporta las siguientes funciones:
int empty_q(queue *q);
int display_q(queue *q);
int create_q(queue **q, int size);
int delete_q(queue **q);
int enqueue(queue *q, int data);
int dequeue(queue *q, int *data);
Según el tamaño de la cola por parte del usuario, la memoria para q_data se asignarán en create_q().
Pregunta: ¿Cómo crear una memoria compartida para esta cola usando las funciones del sistema proporcionadas en "sys/shm.h"? Cualquier fragmento de código/ejemplo para crear/adjuntar/recuperar/eliminar memoria compartida para la estructura de datos de la cola usando shmget(), shmat(), shmctl(), etc. sería de gran ayuda.
Si desea comunicar procesos utilizando un mecanismo similar a una cola, ¿no sería mejor utilizar [colas de mensajes] (http://www.it.uom.gr/teaching/c_marshall/node25.html)? A través de subprocesos del mismo proceso, una cola estándar protegida por una sección crítica sería suficiente –
@dario_ramos las colas de mensajes serían una solución ideal para este problema ... pero estoy tratando de dar un ejemplo utilizando una cola para averiguar cómo adjuntar una estructura de datos con una memoria compartida. –
En ese caso, cuando me metí con Unix IPC, seguí [la guía de Beej para Unix IPC] (http://beej.us/guide/bgipc/). ¡Incluso tiene algunas bromas! Puede ir directamente a la [sección de memoria compartida] (http://beej.us/guide/bgipc/output/html/multipage/shm.html) –