stockage de tableau de structure en mémoire partagée

stockage de tableau de structure en mémoire partagée - C - Programmation

Marsh Posté le 24-03-2010 à 17:57:03    

Bonjour,
 
Je suis occupée de réaliser une application multi thread du type producteur-consommateur avec un buffer en mémoire partagée entre les threads producteurs et les threads consommateurs.
J'ai quelques soucis avec l'écriture en mémoire partagée:
Je crée mon segment de mémoire partagée:

Code :
  1. int buffer;
  2. buffer = shmget(IPC_PRIVATE, n*sizeof(struct MyStruct, IPC_CREAT|IPC_EXCL|00660); //n est défini plus faut et fixe !


 
pour chaque thread qui veut faire une opération de lecture ou d'écriture, j'attache le segment de mémoire partagée:

Code :
  1. struct MyStruct *memo;
  2. memo = (struct Vote *)shmat(buffer, 0, SHM_W); //pour l'écriture
  3. struct MyStruct dataToAdd;
  4. //initialisation de dataToAdd
  5. //et puis la j'veux mettre dataToAdd en mémoire partagée


 
Vu que je veux faire un buffer, je veux utilisé ma mémoire partagée comme un tableau de structure ...  
J'ai un int qui indique l'index du tableau auquel il faut écrire .
Comment faire???
 
Merci d'avance

Reply

Marsh Posté le 24-03-2010 à 17:57:03   

Reply

Marsh Posté le 24-03-2010 à 18:00:31    

Pourquoi utiliser shm si c'est pour faire du multithread?  (shm permet de partager la memoire entre processus, les thread -- par definition -- partagent toute leur memoire).


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 24-03-2010 à 18:03:15    

oui mais malheureusement, c'est dans le cadre d'un cours et on nous demande d'utiliser la mémoire partagée

Reply

Marsh Posté le 25-03-2010 à 10:16:55    

Mais du coup je me demande si ton exo ne doit pas être fait avec des processus et non pas des threads. Car si c'est présicé d'utiliser la mémoire partagée j'aurai un doute...


---------------
Je vous attends mes disciples sur Idées pour un monde meilleur
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed