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 :

problème de synchronisation


Sujet :

Linux

  1. #1
    Membre habitué
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Par défaut problème de synchronisation
    Exercice:
    En utilisant les pipes écrire un programme qui permet de realiser le produit scalaire de vecteur d'une façon distribuée:
    Le père crée 3 fils , remplit les deux vecteurs et distribue les données sur les fils.Ces derniers calculent les résultats partiels et les envoient au père qui calcule la résultat global et affiche à l'écran.


    mon problème que j'arrive pas a synchronisé les processus voila mon fichier source :

    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
    #include<stdio.h>
    #include<stdlib.h>
    #include<unistd.h>
    #include<limits.h>
    #include<math.h>
     
    main(){
    int p1[2],p2[2],p3[2],p4[2];
    int i,j,s=0;
    int X,Y,Z,a,b,c;
     
    typedef struct
    { int x ,y ,z;
     }vect;
     
    pipe(p1);pipe(p2);pipe(p3);pipe(p4);
    vect *vecteur=malloc(2*sizeof(vect));
     if(fork()!=0)
      if(fork()!=0)
       if(fork()!=0)
     
      {printf("p1=%d %d\n",getpid(),getppid());
        for(i=0;i<2;i++)
         {
           printf("x= ");
           scanf("%d",&(vecteur[i].x));
           printf("\ny= ");
           scanf("%d",&(vecteur[i].y));
           printf("\nz= ");
           scanf("%d",&(vecteur[i].z));
         }
     
       write(p1[1],vecteur,2*sizeof(vect));
       close(p1[1]);
       wait();
       a=read(p2[0],&X,sizeof(int));
       //printf("a=%d\n",a);
       b=read(p3[0],&Y,sizeof(int));
       c=read(p4[0],&Z,sizeof(int));
       s=a+b+c;
       printf("\ns=%d",s);
      }
     
       else
       {sleep(5);
            //printf("f1=%d %d\n",getpid(),getppid());
            i=0;close(p1[1]);
            read(p1[0],vecteur,2*sizeof(vect));
            X=(vecteur[i].x) * (vecteur[i+1].x);
            //printf("X=%d\n",X);
            write(p2[1],&X,sizeof(int));close(p1[0]); 
      }
      else
       {   sleep(5);close(p1[1]);
           //printf("f2=%d %d\n",getpid(),getppid());
           i=0;
           read(p1[0],vecteur,2*sizeof(vect));
           Y=(vecteur[i].y) * (vecteur[i+1].y);
           //printf("Y=%d\n",Y);
           write(p3[1],&Y,sizeof(int)); close(p1[0]);  
       }
     else
        { sleep(5);close(p1[1]);
          //printf("f3=%d %d\n",getpid(),getppid());
          i=0;
          read(p1[0],vecteur,2*sizeof(vecteur));
          Z=(vecteur[i].z) * (vecteur[i+1].z);
          //printf("Z=%d\n",Z);
          write(p4[1],&Z,sizeof(int));close(p1[0]); 
        }
       }

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Ton problème n'est pas que tu n'arrives pas a synchroniser les processus, mais que tu as des soucis au niveau de l'algorithmique (et du respect de la norme C).

    Essayes d'ecrire ce que tu souhaites faire - pas en C mais dans ta langue maternelle - et postes le ici : je n'arrive pas a comprendre ce que tu souhaites faire en regardant ton code.

    Regarde aussi comment fonctionne la fonction fork() : je pense que tu n'as pas bien compris ce qu'elle faisait, et surtout comment l'utiliser.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

Discussions similaires

  1. problème de synchronisation de thread
    Par youp_db dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 11/10/2006, 11h34
  2. [VB.net] Problème de synchronisation d'une base
    Par WriteLN dans le forum Windows Forms
    Réponses: 18
    Dernier message: 21/10/2005, 13h11
  3. Problème de synchronisation...
    Par sankookai dans le forum MFC
    Réponses: 10
    Dernier message: 16/02/2005, 14h03
  4. [C#] Problème de synchronisation de combobox
    Par WwiloO dans le forum Windows Forms
    Réponses: 3
    Dernier message: 20/12/2004, 19h56
  5. Problème de synchronisation dans un JTextArea
    Par wutang dans le forum Composants
    Réponses: 3
    Dernier message: 21/06/2004, 15h06

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