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

Visual C++ Discussion :

[Multi-threading] Probleme avec les mutex


Sujet :

Visual C++

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut [Multi-threading] Probleme avec les mutex
    Bonjour,

    Je veux simplement mettre en évidence la mutuelle exclusion dans un environnement multi-thread.
    Pour cela j'ai créé trois thread qui accèdent en écriture à une variable globale. Dans la zone protégée, j'ai donc incrémenté la variable globale et insérer des printf() pour savoir quel thread est entrain d'utiliser la variable.
    Mais voilà que je constate, que la zone protégée ne l'est pas du tout et tout les threads peuvent accéder en même temps à cette zone.
    Si vous pourriez me dire pourquoi et d'ou vient mon erreur?

    Voici une partie du code (je ne mets pas la création des threads):
    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
     
    /****************************************************************
    * threadFunc0:
    *
    * 06/03/2007
    ****************************************************************/
    DWORD WINAPI threadFunc0 (LPVOID lpParameter)
    {
    	InitializeCriticalSection(&m_sectionCr);
     
    	int i = *(int*) lpParameter;
    	bool bEndThread = false;
     
    	while(!bEndThread)
    	{
    		writeVar(i);
    		bEndThread = true;
    	}
     
    	return 0;
    }
     
    /****************************************************************
    * threadFunc1:
    *
    * 06/03/2007
    ****************************************************************/
    DWORD WINAPI threadFunc1 (LPVOID lpParameter)
    {
    	InitializeCriticalSection(&m_sectionCr);
     
    	int i = *(int*) lpParameter;
    	bool bEndThread = false;
     
    	while(!bEndThread)
    	{
    		writeVar(i);
    		bEndThread = true;
    	}
     
    	return 0;
    }
     
    /****************************************************************
    * threadFunc2:
    *
    * 06/03/2007
    ****************************************************************/
    DWORD WINAPI threadFunc2 (LPVOID lpParameter)
    {
    	InitializeCriticalSection(&m_sectionCr);
     
    	int i = *(int*) lpParameter;
    	bool bEndThread = false;
     
    	while(!bEndThread)
    	{
    		writeVar(i);
    		bEndThread = true;
    	}
     
    	return 0;
    }
     
    /****************************************************************
    * writeVar:
    *
    * 06/03/2007
    ****************************************************************/
    void writeVar (int i)
    {
    	InitializeCriticalSection(&m_sectionCr);
     
    	EnterCriticalSection(&m_sectionCr);
    	printf("\n---Debut section critique: writeVar()---\n");
    	printf("Thread %c: m_iVal = %d\n",i,m_iVal);
    	m_iVal++;
    	Sleep(1000);
    	printf("Thread %c: m_iVal = %d\n",i,m_iVal);
    	printf("---Fin section critique: writeVar()---\n");
    	LeaveCriticalSection(&m_sectionCr);
    }
    Note: la variable i coorespond au numéri du thread.

    Et voici les résultats obtenus pou une tentative mais ca reste toujours du meme genre si je relance mon appli:
    Nom : resultat_MUTEX.JPG
Affichages : 121
Taille : 38,2 Ko

    Merci.
    Bonne fin de journée!

    Nicolas
    Images attachées Images attachées  

Discussions similaires

  1. probleme avec les thread
    Par ashurah dans le forum Concurrence et multi-thread
    Réponses: 15
    Dernier message: 26/03/2010, 14h05
  2. Probleme avec les Threads
    Par ouxss dans le forum C++
    Réponses: 2
    Dernier message: 05/01/2010, 10h27
  3. Probleme avec les threads
    Par Loenix dans le forum Général Python
    Réponses: 4
    Dernier message: 04/06/2009, 14h50
  4. Probleme avec les thread
    Par jonny dans le forum MFC
    Réponses: 11
    Dernier message: 01/06/2006, 17h37
  5. Probleme avec les threads
    Par Orahn dans le forum MFC
    Réponses: 5
    Dernier message: 04/11/2005, 10h14

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