next up previous contents
Next: Modes de synchronisations Up: UTILISATION DE LA LIBRAIRIE Previous: Initialisation des sémaphores et

Partage de données, Matrice partagée

En plus du bloc de communication, une zone de mémoire partagée peut être allouée pour mettre en commun entre les clients et les serveurs un tableau de nombres flottants que l'on appelle la matrice partagée.

Initialisation de la matrice partagée

L'initialisation se fait avec la fonction "alloc_matrix_shm()" qui demande une taille en pixels (1[pixel]=4[bytes]) et retourne un pointeur de type flottant.

Cette zone est allouée indifféremment par le client ou le serveur. Mais toutefois, il faut que la taille de la zone soit donnée identique des 2 côtés. Dans le cas ou le client ne connaît pas au préalable la taille de la zone, il peut questionner le serveur pour la connaître. Dans ce cas l'initialisation se fait avec la fonction "ask_and_init_shm()". Le block de communication et les sémaphores doivent être déjà initialisés.

Le code serveur ressemble à:

#include <stdio.h>
#include <ipcdef.h>

float           *ptr;         /* pointeur sur matrice partagee */
int             size;         /* taille de la matrice partagee */

extern int      matrix_key;   /* identificateur de memoire pour matrice */
...
main()
{
      ...
      matrix_key = 1000;
      if ((int)(ptr=(float *)alloc_matrix_shm(size))==-1){
         ...
      }
      ...
}

Remarque: la fonction initialise la matrice partagée par segments de 1[MB]. Par exemple, si on désire une matrice partagée de 1[Mpixels], 4 segments de mémoires partagées contigus seront alloués. Dans ce cas, il faut donner 4 identificateurs. La fonction alloc_matrix_shm() s'en charge de manière automatique en décrémentant la valeur de l'identificateur de base d'une unité pour chaque segment. Dans cette exemple, les identificateurs seront: 1000, 999, 998 et 997. On remarque donc que l'identificateur du bloc de communication doit être choisi de telle sorte qu'il n'interfère pas avec les identificateurs calculés automatiquement.



WEBER Luc
Mon May 10 13:41:34 MET DST 1999