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 :

parallélisme en C sous linux


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1
    Par défaut parallélisme en C sous linux
    Bonjour,
    je souhaite supprimer des informer contenus dans un fichier txt à partir de c sous linux. Mes informations sont des numéros de 2 jusqu'à n. On utilise 2 processus parallèle.
    je souhaite d'abord on utilise un processus p qui enregistre les nombres dans un fichier f puis crée un processus p1, celui-ci crée p2. ces 2 processus calcule les nombres premier.

    le processus p coordonne les autre processus comme suit:
    - il crée p1, celui-ci crée p2. ces 2 proces calculent a partir de f parallèlement et respectivement les nbrs divisible par 2 et par 3 (3 est le premier nombre premier déduit par p1, il est communique a p2 avant de réalise le rest de son travail) qu'il enregistre respectivement dans f1 et f2.
    - P attend la fin de ce travail avant de mettre a jour f en éliminant tous les elts de f1 et f2.
    - le travail est refaire en invoquant p1 et p2.
    - p attend la fin de ce travail avant de mettre a jour f en éliminant tous les nombres de f1 et f2.

    Ce travail est refaire jusqu'à atteindre racine de n processus (p,p1,p2,p,p1,p2,.............)
    --------------------------------------------------
    mon problème c que dans l'exécution de mon programme les processus ne sont pas en parallèle et mon but c le parallélisme(je ne sais pas ou est l'erreur) et comment je peut communique processus 1 avec processus 2 sans utilisation des signaux (3 est le premier nombre premier déduit par p1, il est communique a p2 avant de réalise le reste de son travail).

    Voila mon programme

    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    FILE *fichier,*fichier1,*fichier2;
    int position=0;
     
    void P2() // fils de p1
     
    { int i,c,id,k;
     
    fichier = fopen("fichier.txt","r+");
    //fichier1 = fopen("fichier1.txt","r+");
    fichier2 = fopen("fichier2.txt","w+");
     
     
    printf("\n--Execution du 2eme fils-- \n");
    position=position+1;
    // fscanf(Fichier,"%d\n",&k);
    fseek(fichier,position,SEEK_SET);
    fscanf(fichier,"%d",&k);
    printf("les multiple de %d \n",k);
    while (!feof(fichier));
    {
    fscanf(fichier,"%d\n",&c);
    if (c % k == 0) {
    fprintf(fichier2,"%d\n",c);
    fscanf(fichier2,"%d",&c);
    printf(" %d\n",c);}
    }
    fclose(fichier2);
    //fclose(fichier1);
    fclose(fichier);
    exit(1);
     
    }
     
    void P1()//FIls
    {
    int a,c,id,k;
    id = fork();
    if (id == 0 ) P2();
    else {
    fichier = fopen("fichier.txt","r+");
    fichier1 = fopen("fichier1.txt","w+");
     
     
    printf("\n--Execution du 1er fils-- \n");
    fseek(fichier,position,SEEK_SET);
    fscanf(fichier,"%d",&k);
    printf("les multiple de %d \n",k);
    while (!feof(fichier))
    {
    fscanf(fichier,"%d\n",&c);
    if (c % k == 0) {
    fprintf(fichier1,"%d\n",c);
    fscanf(fichier1,"%d",&c);
    printf(" %d \n",c);
    }
    }
    fclose(fichier);
    fclose(fichier1);
    }
    wait(0);
    exit(0);
    }
     
    int main ()
    {
    FILE *fich;
    int i, n,a,c,b, id, nbr=2;
     
    //Creer et remplir le fichier
    printf("donner le nombre n \n");
    scanf ("%d",&n);
    fichier=fopen("fichier.txt","w+");
    printf (" les elements de fichier \n");
    for (i=2; i<=n; i++)
    { fprintf(fichier, "%d \n", i);
    printf (" %d \n",i);
    }
    fclose(fichier);
     
     
    //creer et remplir le fichier1 et le fichier2
    float r=sqrt(n);
    int rr= (int) r;
    while /*(nbr*nbr <= n)*/(nbr <= rr)
    {
    id= fork();
    if (id==0) P1();
    else wait (0);
     
    //mise a jour de fichier
    fichier = fopen("fichier.txt","r");
    fichier1 = fopen("fichier1.txt","r");
    fichier2 = fopen("fichier2.txt","r");
    fich = fopen("fich.txt","w");
     
    while (!feof(fichier1) && !feof(fichier2))
    {
    fscanf(fichier1,"%d",&a);
    fscanf(fichier2,"%d",&c);
     
    // printf("a:%d\n c:%d\n",a,c);
    while(!feof(fichier))
    {
    fscanf(fichier,"%d",&b);
    // printf("b:%d\n",b);
    if ((a != b) && (c != b))
    {
    printf("bb les elts de fich:%d\n",b);
    fprintf(fich,"%d\n",b);
    fscanf(fich,"%d",&b);
    printf(" %d \n",b);
    }
    }
    }
    fclose(fichier); fclose(fich);
    remove ("fichier.txt");
    rename ("fichier.txt","fich.txt");
     
    position = position +2;
    nbr++;
     
    fseek(fichier,position,SEEK_SET);
     
    }
    }
    d'avance merci de votre aide.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 290
    Par défaut pthread
    Bonjour,

    Vous pouvez utiliser la library pthread (multithreading posix). Il y a un bon tutoriel sur developpez :

    http://franckh.developpez.com/tutoriels/posix/pthreads/

Discussions similaires

  1. [Série] Accès au port série sous linux
    Par ghost dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 10/10/2007, 10h43
  2. Comment désinstaller MySQL sous linux
    Par nahmsath dans le forum Installation
    Réponses: 5
    Dernier message: 18/09/2007, 10h46
  3. installer jbuilder7 sous linux
    Par rtlinfo34 dans le forum JBuilder
    Réponses: 5
    Dernier message: 30/10/2002, 19h16
  4. Je ne peux établir une connexion cliente sous Linux.
    Par Anonymous dans le forum CORBA
    Réponses: 5
    Dernier message: 16/04/2002, 15h57

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