Sto tentando di progettare/implementare una coda (circolare) (in C) come memoria condivisa in modo che possa essere condivisa tra più thread/processi.Progettazione di una coda per essere una memoria condivisa
La struttura della coda è come segue:
typedef struct _q {
int q_size;
int q_front;
int q_rear;
int *q_data;
}queue;
che supporta le seguenti funzioni:
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);
Secondo la dimensione della coda menzionato dall'utente, la memoria per q_data saranno destinati, create_q().
Domanda: Come creare una memoria condivisa per questa coda utilizzando le funzioni di sistema fornite in "sys/shm.h"? Qualsiasi frammento di codice/esempio per creare/allegare/recuperare/eliminare la memoria condivisa per la struttura dati della coda usando shmget(), shmat(), shmctl(), ecc. Sarebbe di grande aiuto.
Se si desidera comunicare i processi utilizzando un meccanismo simile a una coda, non sarebbe meglio utilizzare [code di messaggi] (http://www.it.uom.gr/teaching/c_marshall/node25.html)? Attraverso thread dello stesso processo, una coda standard protetta da una sezione critica sarebbe sufficiente –
@dario_ramos code di messaggi sarebbe una soluzione ideale per questo problema .. ma sto cercando di dare un esempio usando una coda per scoprire come allegare una struttura dati con una memoria condivisa. –
In questo caso, quando ho fatto confusione con Unix IPC, ho seguito [la guida di Beej su Unix IPC] (http://beej.us/guide/bgipc/). Ha anche qualche barzelletta! Puoi andare direttamente alla [sezione memoria condivisa] (http://beej.us/guide/bgipc/output/html/multipage/shm.html) –