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 :

threads & mutex


Sujet :

C

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2005
    Messages
    11
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 11
    Par d�faut threads & mutex
    hello!

    je d�couvre la programmation syst�me en C sous linux et pour mieux comprendre j'ai fait un b�te programme (en C) mais je me suis un peu embrouill� et je n'y vois plus clair..

    voici le code:

    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 <pthread.h>
    #include <unistd.h>
    #include <stdlib.h>
     
     
    /*globales*/
     
    pthread_mutex_t mon_mutex = PTHREAD_MUTEX_INITIALIZER;
    int i,g,a;
     
    void *mon_thread(void *arg)
    {
    //	pthread_mutex_init(&mon_mutex,NULL);
    //	pthread_mutex_lock(&mon_mutex);
            int i = (int) arg;
    	printf("je suis le DEUXIEME thread, j'ai besoin de 2  secondes pr calculer\n");
    	sleep(2);
    	i=i+15;
    	g=i;
    	printf("j'ai fini mon calcul: i  vaut %d, je rends la main\n",i);
    //	pthread_mutex_unlock(&mon_mutex);
     
    	return (void*)i;
            pthread_exit(NULL);
     
     
     
     
    }
     
    int main(void)
    {
    	int retour;
    	pthread_t thread;
    //	pthread_mutex_init(&mon_mutex,NULL);	
     
    	//lancer premier thread, faire 5 calculs
    	//mettre premier thread en pause
    	//lancer second thread, faire calcul avec valeur du 1er thread
    	//arreter 2eme thread
    	//relancer premier thread avec valeur calcul 2nd thread
     
    	//1er argument: passage par adr de l'identifiant du thread
    	//2eme argument: designe attributs du thread, null = defaut
    	//3eme argument: pointeur sur la fct a executer ds le thread
    	//4eme argument: est l'argument de la fct thread
     
    	for (i=0;i<30;i++)
    	{
    		printf("valeur de i: %d\n",i);
     
    		if(i==5)
     
    		{
    		printf("le thread 1 s'endort et passe la valeur de i au thread 2\n");
     
    		pthread_create(&thread, NULL, mon_thread, (void*)i);
     
    //		pthread_mutex_lock(&mon_mutex);
     
     		pthread_join(thread, (void**)retour);
     
    //		pthread_mutex_unlock(&mon_mutex);
     
    	        printf("i = %d\n g= %d\n",i,g);
     
    		printf("retour: %d",retour);
     
    		printf("continuons maintenant avec la nouvelle valeur de i qui vaut: %d\n",i);
    		}
     
    	}
     
    	return 0;
     
     
     
    }
    mes questions sont les suivantes :

    - comment renvoyer la nouvelle valeur de i � la fonction main?

    - qu'en est-til du mutex? ou l'utiliser? dans quel cas?

    - pq la fonction mon_thread me retourne la variable "retour" valant -1208480800

  2. #2
    Membre �prouv�
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    D�tails du profil
    Informations personnelles :
    �ge : 36
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Par d�faut
    - comment renvoyer la nouvelle valeur de i � la fonction main?

    - qu'en est-til du mutex? ou l'utiliser? dans quel cas?

    -pq la fonction mon_thread me retourne la variable "retour" valant-1208480800
    ben :pthread_exit(i);

  3. #3
    Membre �m�rite
    Profil pro
    Inscrit en
    F�vrier 2007
    Messages
    572
    D�tails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 572
    Par d�faut
    Il y a quelques erreurs dans ton programme :
    - la variable local i dans mon_thread masque la variable global i. Renomme tes variables pour eviter ce genre de cas. Consulte �galement des que possible les conseils sur le nommage des fonctions et variables.
    - pthread_exit(NULL) est completement inutile (c'est du code mort). Il est plac� apres un return. Tu ne dois pas l'appeler de tout facon, parce que le thread va se terminer sur le return.
    - pthread_join ecrit la valeur de retour � l'adresse indiqu� par le deuxieme parametre. Dans ton code, tu mets simplement retour. En d'autre termes, tu demandes d'ecrire � une adresse qui est en fait la valeur de la variable local retour.
    tu dois ecrire quelque chose du genre :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    pthread_join(thread, &retour);
    - enfin, teste les valeurs retour des fonctions. Ca permet de savoir si l'appel s'est bien pass� ou pas, et ca peut t'aider � trouver une erreur. Meme pour un simple test, il faut le faire, ca permet de gagner du temps dans l'analyse d'un probleme.

  4. #4
    Expert �minent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retrait�
    Inscrit en
    D�cembre 2003
    Messages
    14 512
    D�tails du profil
    Informations personnelles :
    �ge : 68
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Retrait�

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 14 512
    Par d�faut
    Citation Envoy� par keni
    je d�couvre la programmation syst�me en C sous linux et pour mieux comprendre j'ai fait un b�te programme (en C) mais je me suis un peu embrouill� et je n'y vois plus clair..
    Ce que tu fais n'est pas de la 'programmation syst�me'. C'est de la b�te programmation multi-t�che tout ce qu'il y a de plus applicative et �a marche aussi sous Windows (pthreads)

    http://emmanuel-delahaye.developpez.com/pthreads.htm

Discussions similaires

  1. [C++] Threads et mutex
    Par jro-daemon dans le forum C++
    R�ponses: 2
    Dernier message: 11/01/2008, 17h54
  2. c++ thread et mutex
    Par Belegkarnil dans le forum SDL
    R�ponses: 1
    Dernier message: 22/08/2007, 13h37
  3. [MT] Gal�re avec thread et mutex pour acc�s variable
    Par wadcyr8_197 dans le forum Threads & Processus
    R�ponses: 36
    Dernier message: 26/07/2007, 14h45
  4. R�ponses: 11
    Dernier message: 23/05/2007, 10h14
  5. R�ponses: 12
    Dernier message: 18/05/2007, 11h34

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