IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

tableau de semaphore


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 80
    Points : 56
    Points
    56
    Par défaut tableau de semaphore
    bonjour
    j'ai programmer un exercice en utilisant les semaphore de djikstra et j'ai eu un probleme lorsque j'ai utiliser un tableau de semaphore pour protéger un tableau de case malgré que chaque case devait etre utiliser en execlusion mutuel mais plusieur processus entrer en section critique pour modifier la case (that's big problem) bon voici les primitive de djikstra ainsi que le tableau de semaphore que j'ai utilisé et initialisé à 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
     
    /* fichier dijkstra.h */
    /* Implementation des semaphores de Dijkstra a l'aide des semaphores
    * de SystemV.
    *
    * sem_create(): creation d'un semaphore
    * P() : realisation de l'operation P sur un semaphore
    * V() : realisation de l'operation V sur un semaphore
    * sem_delete() : suppression d'un semaphore
    */
    int sem_create(cle, initval) /* creation d'un semaphore relie a cle */
    /* de valeur initiale initval */
    key_t cle ;
    int initval ;
    {
    int semid ;
    union semun {
    int val ;
    struct semid_ds *buf ;
    ushort *array ;
    } arg_ctl ;
    semid = semget(ftok("dijkstra.h",cle),1,IPC_CREAT|IPC_EXCL|0666) ;
    if (semid == -1) {
    semid = semget(ftok("dijkstra.h",cle),1, 0666) ;
    if (semid == -1) {
    perror("Erreur semget()") ;
    exit(1) ;
    }
    }
    arg_ctl.val = initval ;
    if (semctl(semid,0,SETVAL,arg_ctl) == -1) {
    perror("Erreur initialisation semaphore") ;
    exit(1) ;
    }
    return(semid) ;
    }
    void P(semid)
    int semid ;
    {
    struct sembuf sempar ;
    sempar.sem_num = 0 ;
    sempar.sem_op = -1 ;
    sempar.sem_flg = SEM_UNDO ;
    if (semop(semid, &sempar, 1) == -1)
    perror("Erreur operation P") ;
    }
    void V(semid)
    int semid ;
    {
    struct sembuf sempar ;
    sempar.sem_num = 0 ;
    sempar.sem_op = 1 ;
    sempar.sem_flg = SEM_UNDO ;
    if (semop(semid, &sempar, 1) == -1)
    perror("Erreur operation V") ;
    }
    void sem_delete(semid)
    int semid ;
    {
    if (semctl(semid,0,IPC_RMID,0) == -1)
    perror("Erreur dans destruction semaphore"); 
     
    }
     
     
     
    //tab de semaphore 
    int tab[5]:
    for (i=0;i<(taille);i++)
    {
    tab[i]= sem_create(i,1) ;
    printf("creation du semaphore s_tab_nc [%d]= %d \n",i,s_tab_nc[i]);
    }
    veillez me conseillez svp

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Points : 30
    Points
    30
    Par défaut
    tu veux dire que tu as X process lancer, et qu'ils essaient de lire et/ou d'ecrire dans la meme adresse de sémaphore en meme temps ?

    merci de ta précision

    je note un truc bizard dans ton code : ton union de la structure de sémaphore est propre a ta fonction sem_create ??

    théoriquement ta liste chaine contenant tes sémaphore doit etre global ...
    dans l'union aussi il manque : seminfo , bien utile pour le buffer de l'IPC_INFO

    je note aussi qu'il te manque les lock sur les semaphores, d'ou le probleme que tu doit avoir vient de la ...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 80
    Points : 56
    Points
    56
    Par défaut
    salut
    bon j'ai résolut le probleme du tableau de semaphore il y avait une petite erreur dans mon programme et non pas sur le fichier djikstra.h

    svp pour quoi je dois utilisé les lock , mon programme marche tres bien
    et c'est quoi encore seminfo
    si vous voulez je vous envois une copie de mon tp
    byyyyyyyyyyyyyyyyyy

    je note aussi qu'il te manque les lock sur les semaphores, d'ou le probleme que tu doit avoir vient de la ...[/QUOTE]

Discussions similaires

  1. trier un tableau et compter des elements du tableau
    Par remi51 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 17/06/2002, 16h51
  2. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  3. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21
  4. transmision de tableau en parametre
    Par Horus dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/05/2002, 11h15
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo