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

 C Discussion :

Synchronisation entre Thread


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : décembre 2012
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Synchronisation entre Thread
    Bonjour,
    Je dispose de deux Thread qui font de simple calcules et renvoi leurs résultats au main.
    Le problème survient lors de la création des Thread
    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
     
    #include <stdio.h>
    #include <math.h>
     
    #include <stdlib.h>
    #include <unistd.h>
    #include <pthread.h>
    typedef struct str {
    	int a;
    	int b;
    	int c;
    	float d;}parametre;
     
    void *fils1(void *valeur){
    	parametre *val=(parametre *)malloc(sizeof(parametre));
     
    	val=valeur;
     
    	int a=val->a;
    	int b=val->b;
    	float d=val->d;
     
    	float *x1=malloc(sizeof *x1);
     
    	*x1=(-b-sqrt(d))/(2*a);
    	//printf("\nThread1: Solution 1 trouvée  = %f\n",*x1);
    	//printf("la valeur de x1 %f\n",*x1);
    	pthread_exit(x1);
    }
    void *fils2(void* valeur){
    	parametre *val=(parametre *)malloc(sizeof(parametre));
    	val=valeur;              /*le cast se fait implicitement*/	
    	int a=val->a;
    	int b=val->b;
    	float d=val->d;
    	float *x2=malloc(sizeof *x2);
     
    	*x2=(-b+sqrt(d))/(2*a);
    	//printf("la valeur de x2 %f\n",*x2);
    	pthread_exit(x2);
    }
    int main(){
    	float d,x1,x2;
    	pthread_t p1,p2;
    	int val;
     
    	float *sauv1=NULL;
    	float *sauv2=NULL;
    	parametre *valeur=(parametre *)malloc(sizeof(parametre));
    	while(1){
    		printf("Donner la valeur de a\n");
    		scanf("%d",&valeur->a);
    		printf("Donner la valeur de b\n");
    		scanf("%d",&valeur->b);
    		printf("Donner la valeur de c\n");
    		scanf("%d",&valeur->c);
    		valeur->d=(valeur->b*valeur->b)-(4*valeur->a*valeur->c);
    		printf("D=%f\n",valeur->d);
     
    		if((valeur->d)>=0){
    			pthread_create(&p1,NULL,*fils1,valeur);
    			pthread_create(&p2,NULL,*fils2,valeur);
    			pthread_join(&p1,(void**)&sauv1);
    			pthread_join(&p2,(void**)&sauv2);
    			/*solution1=(float)sauv1;
    			solution2=(float)sauv2;
    			*/			
    			printf("La Solution 1 X1= %f\nLa Solution 2 X2= %f\n",*sauv1,*sauv2);
     
    			}
    		else{
    			printf("Pas de Solution\n");
     
    		}
    	free(sauv1);
    	free(sauv2);
    	}
    return 0;
    }
    Console:
    Donner la valeur de a
    1
    Donner la valeur de b
    2
    Donner la valeur de c
    1
    D=0.000000
    Erreur de segmentation

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : décembre 2012
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Quelque modification
    Quelque modification:
    1-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pthread_create(...,fils1,...)
    2-en faisant ceci supprime le malloc qui le précède (innutile).

    l'erreur de segmentation vient des instructions free,les mettre en commentaires donne un bloquage de l’exécution se bloque plus exactement lors de l'execution phread_create.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : décembre 2012
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Le problème été dans le paramètre 1 de pthread_join, il est déjà déclarer comme un pointeur, vu que j'ai l'habitude de les déclarer en int

    Si j'ai un conseil à donner utiliser le debugger, il m'a beaucoup aider
    sur linux utiliser gdb.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Synchronisation entre Threads
    Par hotman1313 dans le forum Concurrence et multi-thread
    Réponses: 7
    Dernier message: 24/02/2015, 17h38
  2. Problème de synchronisation entre Thread et VCL
    Par Jipété dans le forum Débuter
    Réponses: 33
    Dernier message: 21/05/2012, 11h14
  3. Problème de rafraichissement [EDIT: Synchronisation entre threads ]
    Par Nicolus dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 29/10/2011, 14h37
  4. Réponses: 2
    Dernier message: 29/04/2007, 19h59
  5. Synchronisation entre 2 threads
    Par bodbod dans le forum C++
    Réponses: 8
    Dernier message: 20/08/2004, 18h29

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