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 :

protection avec MUTEX


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 266
    Par défaut protection avec MUTEX
    Bonjour,

    Voilà je développe une fonction qui peut être appelée par plusieurs threads, mais je souhaite qu'un seul thread à la fois l'exécute pour éviter tout plantage, alors je décide d'utiliser CreateMutex, ReleaseMutex, CloseHandle et WaitForSingleObject pour faire cela mais je sais pas très bien où les employer dans ma fonction.
    Est-ce que comme cela ça convient ?
    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
     
    int ma_fonction()
    {
        HANDLE hMutex;
        DWORD dwWaitMutex;
        hMutex=CreateMutex(NULL, FALSE, L"mon_mutex");
        if(hMutex==NULL)
        {
            printf("Error while creating mutex handle");
            return 0;
        }
        /* Test si le handle de mutex existe déjà */
        if(GetLastError()==ERROR_ALREADY_EXISTS)
        {
            /* on attend qu'il soit libéré */
            dwWaitMutex=WaitForSingleObject(hMutex,INFINITE);
        }
        // Section critique
        // appel de ma fonction à protéger
        // Fin section critique
     
        ReleaseMutex(hMutex);
        CloseHandle(hMutex);
        return 1;
    }

  2. #2
    Membre très actif Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Par défaut
    Je pense que tu as faux, la mutex est locale à la fonction donc à chaque appel de la fonction une mutex différente est déclarée.
    Déclare une mutex en global, et lock là juste avant chaque appel à la fonction en question, ensuite dés que la fonction est exécutée tu unlock.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    function_critique (void){/*traitement*/}
    fmutex : mutex
     
    Create_mutex (fmutex) /*tout au début*/
    /*plus bas dans le code on doit appeller function_critique*/
    lock (fmutex)
    function_critique();
    unlock (fmutex);
     
    destroy_mutex(fmutex); /*tout à la fin de l'application*/
    Je ne connais pas les mutex sous windows mais ceci est le principe, j'espère avoir bon
    Compil your life guy!
    The Aures Project

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 266
    Par défaut
    Pigé ! Je faisais du grand n'importe quoi !
    Merci pour ta réponse !

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

Discussions similaires

  1. Protection avec htaccess
    Par lodan dans le forum Apache
    Réponses: 2
    Dernier message: 14/10/2009, 12h18
  2. [FAQ] une seule instance de mon appli avec Mutex
    Par kacedda dans le forum MFC
    Réponses: 2
    Dernier message: 26/11/2008, 09h44
  3. Message d'alerte de protection avec Runtime
    Par curt dans le forum Runtime
    Réponses: 3
    Dernier message: 18/02/2008, 09h02
  4. Protection avec .htaccess
    Par speedylol dans le forum Apache
    Réponses: 5
    Dernier message: 17/01/2007, 20h06

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