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 :

[synchronisation] worker threads


Sujet :

Visual C++

  1. #1
    Membre �clair� Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par d�faut [synchronisation] worker threads
    Hello,

    j aimerais savoir quel mecanisme choisir pour faire de la synronisation multithreading.


    En gros j ai besoin d'avoir un acc�s exclusif a une ressource utilis�e pas deux worker threads differents.

    j ai deja fais un essais avec une section critique et un single lock et un autre essais avec un mutex et un single lock; mais je dois pas avoir tout compris.

    Dites moi juste les types et nombre d objets a utiliser, je me debrouillerai pour implementer.

    ex : 1 single lock different par thread + 1 section critique commune.


    j aimerais vraiment la reponse de qqn qui a deja realis� correctement ce genre de synchro avec les MFC

  2. #2
    Membre �clair�
    Inscrit en
    Juillet 2006
    Messages
    75
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 75
    Par d�faut
    Les sections critiques et les mutex fonctionnent de la m�me fa�on. La seule diff�rence entre les 2 est qu'un mutex est �galement visible d'un autre programme (utile si plusieurs soft acc�dent � la m�me ressource).

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #define TPSMAX 10000
    CCriticalSection sc;
     
    // dans le thread 1 :
    sc.Lock(TPSMAX);
    // accès aux ressources partagées
    sc.Unlock()
     
    // dans le thread 2 :
    sc.Lock(TPSMAX);
    // accès aux ressources partagées
    sc.Unlock()

  3. #3
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    De plus, sous MFC, on peut utiliser la classe CSingleLock qui appelle automatiquement Unlock() dans son destructeur.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    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
    Citation Envoy� par SERTNM
    Les sections critiques et les mutex fonctionnent de la m�me fa�on. La seule diff�rence entre les 2 est qu'un mutex est �galement visible d'un autre programme (utile si plusieurs soft acc�dent � la m�me ressource).
    Je ne suis pas certain mais je pensais qu'il y a avait une autre diff�rence. Notamment que lorsque que l'on se trouve dans une section critique, le processeur n'est plus allou� pour une autre t�che (le multi-tache est temporairement stopp�, d'o� l'importance de faire des op�rations courtes dans les sections critiques) alors qu'avec l'utilisation de mutex, on conserve le multi-tache, � moins �videmment que toutes les autres t�ches soient en attente de la m�me ressource.

    Dites moi si je me trompe?

    Nicolas

    Citation Envoy� par ZaaN
    En gros j ai besoin d'avoir un acc�s exclusif a une ressource utilis�e pas deux worker threads differents.
    Une autre solution peut �tre d'impl�menter un s�maphore � un jeton pour r�aliser une mutex.

  5. #5
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    oui tu te trompes,
    avec un section critique un thread en train de prot�ger une portion de code pourra �tre pr�empt� par le syst�me pour planifi� un ou plusieurs threads.
    les threads suspendus par EntercriticalSection et sur la m�me section critique ne seront pas planifi�s.
    donc un thread pr�empt� pendant un section critique est assur� que le syst�me ne donnera pas la main a un autre thread voulant utiliser la m�me section critique.
    la diff�rence avec le mutex c'est que celui ci repose sur un objet global du syst�me alors que la section critique sur un objet global du processus.
    le mutex permet alors effectivement l'utilisation entre plusieurs processus.

  6. #6
    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
    Ok, c'est clair!

    J'ai du confondre...Pour info, existe-il sous Windows, une fonction qui permette justement de suspendre toute pr�emption pour l'�x�cution unique d'un code dans une section?

    Sans forc�ment avoir besoin d'utiliser un thread avec la priorit� THREAD_PRIORITY_TIME_CRITICAL, chose que je n'ai jamais essay� mais, � ce que j'ai compris, doit n�cessairement se terminer pour redonner la main � d'autres threads.

    Sous VxWOrks( qui est par contre un RTOS), j'ai le souvenir d'avoir utilis� des fonctions permettant justement d'interdire la pr�emption pour �x�cuter un bout de code sp�cifique.

  7. #7
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Rien ne peut emp�cher la pr�emption sous Windows, sauf peut-�tre mettre un thread en THREAD_PRIORITY_TIME_CRITICAL dans un process en REALTIM_PRIORITY_CLASS.
    Cela donnera la priorit� absolument maximale au thread, mais s'il y a un autre thread qui s'ex�cute avec la m�me priorit�, il y aura toujours partage de temps...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Question sur la synchronisation des threads.
    Par sebastieng dans le forum Langages de programmation
    R�ponses: 4
    Dernier message: 07/12/2005, 15h55
  2. Comment suspendre un worker thread?
    Par Mastero dans le forum MFC
    R�ponses: 8
    Dernier message: 08/07/2005, 13h06
  3. R�ponses: 1
    Dernier message: 23/05/2005, 15h52
  4. Synchronisation de thread
    Par declencher dans le forum Langage
    R�ponses: 2
    Dernier message: 07/01/2004, 10h28

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