begin process at 2012 05 30 13:46:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

thread, mutex et variable partagée


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

thread, mutex et variable partagée

mardi 25 janvier 2005 à 17:54:24 | thread, mutex et variable partagée

bloobird0

hello all,

je suis en train d'expérimenter pour la première fois les threads en C sous Windows et je voudrais confirmation ou remarques sur ce qui suit:

J'ai 1 variable globale utilisée entre 2 threads pour que, en gros, le premier puisse envoyer des commandes à l'autre.

Résumé: un thread écrit dans cette variable et l'autre la lit. 

- le 1er thread fait appel à CreateMutex à la ligne juste au dessus de celle qui modifie la variable et un ReleaseMutex à celle juste au dessous
- le 2e thread fait appel à un WaitForSingleObject juste avant de lire la variable.

Les questions que je me posent sont:
 - est ce que dans le 2eme thread je dois faire un CreateMutex avant de lire cette variable et un ReleaseMutex juste après?
- est-ce indispensable d'utiliser les mutex et WaitForSingleObject si la variable n'est modifiée que par un seul thread (sachant que chaque thread est un boucle qui revient régulièrement au même endroit et les commandes peuvent attendre quelques boucles sans problême)?

Merci d'avance pour vos remarques et partage d'expérience.
mardi 25 janvier 2005 à 18:04:46 | Re : thread, mutex et variable partagée

bayeto

Membre Club
Réponse acceptée !
Les mutexes (mutual exclusions) permettent le partage des données ou du code.
Tu es assuré qu'un seul thread accedera aux données partagées.
Utilise CreateMutex qu'une seul fois par mutex.
Ensuite tu verrouille l'accés par WaitForSingleObject
et deverouille via ReleaseMutex
mardi 25 janvier 2005 à 18:19:49 | Re : thread, mutex et variable partagée

bloobird0

ok, si j'ai bien pigé, le CreateMutex permet de
 - créer le mutex (sort de définition de variable)
-  vérouiller tout de suite une variable par le thread qui a créée le mutex en mettant bInitialOwner à TRUE lors de l'appel.

Le WaitForSingleObject sert à attendre qu'elle soit dévérouillée et la vérouille de suite dès qu'elle est libre.

Pour que les threads soient non bloquants et que les échanges se fassent bien, il faut donc appeler ReleaseMutex dès que possible?

mardi 25 janvier 2005 à 18:25:20 | Re : thread, mutex et variable partagée

ymca2003

Il y a aussi les CRITICAL_SECTION mais surtout le bouquin de richter :
[ Lien ]
[ Lien ]
mardi 25 janvier 2005 à 18:31:42 | Re : thread, mutex et variable partagée

bayeto

Membre Club

Tu n'es pas obligé de verouiller de suite le mutex avec le bInitialOwner à TRUE. WaitForSingleObject le verrouillera s'il ne l'est pas.
Tu as raison pour ReleaseMutex.

HANDLE mu = CreateMutex(NULL,FALSE,NULL);
(...)

//le thread n°1
WaitForSingleObject(mu,INFINITE);
ma_variable_partage = 10;
ReleaseMutex(mu);

//le thread n°2
WaitForSingleObject(mu,INFINITE);
cout << ma_variable_partage << endl;
ReleaseMutex(mu);

void clean_up() {
   CloseHandle(mu);
}

Essaye egalement avec les CRITICAL_SECTIONs de Windows:

InitializeCriticalSection <=> CreateMutex
EnterCriticalSection <=> WaitForSingleObject
LeaveCriticalSection <=> ReleaseMutex
DeleteCriticalSection <=> CloseHandle

mardi 25 janvier 2005 à 18:37:47 | Re : thread, mutex et variable partagée

bloobird0

merci 1000 fois bayeto, je vais déjà essayer les mutex et je regarderai ensuite avec les CriticalSection (mais j'ai regardé vite fait dans le MSDN, je ne vois pas bien la différence si ce n'est que le Mutex rajoute un timeout...).


Cette discussion est classée dans : variable, thread, mutex, juste, partagée


Répondre à ce message

Sujets en rapport avec ce message

Autre problém de variable externe [ par mateo40 ] Voila, je déclare dans projet.cpp une variable de type AnsiString chemin. Elle contient le chemin d'un fichier à ouvrir.dans Thread_Chiffrement::Execu Variable partagée : semaphore ? [ par sena ] Bonjour,j'ai deux fonctions.Une de ces 2 fonctions est un thread qui s'exécute toutes les 3 secondes.Ces 2 fonctions utilisent une même variable.je su thread et parametre char [ par Anacr0x ] Salut,juste une petite question, ya-t-il un moyen simple de mettre une variable caractere en parametre d'un thread ?J'arrive a la faire avec un int ou synchronisation multithread [ par hak5 ] salut a tous, je developpe une appli faisant tourner 2 threads. je synchronise mes deux thread grace a une variable globale : il y a un thread qui met Afficher une variable provenant d'un Thread ds une boite de dialogue [ par matge ] BonjourJe travaille avec une boite de dialogue qui lance un Thread de service. J'enregistre des variables dans ceThread, j'aimerais les afficher dans Thread et multiprocesseur [ par themaste ] Salut a tous!Voila, j'ai une appli multithread, avec un principal, et 3 autres dit "secondaire".Le premier est principale dans le sens ou c'est lui qu MFC Probleme d'utilisation de variable propre au graphique [ par donslim ] Salut à tous : Donc voilà mon problème,je travaille avec MFC et  je voudrais utiliser ma variable m_L1 de type CListBox dans un thread qui est défini thread et section critique [ par blueburry ] Bonjour,je suis en train de manipuler des threads et g un petit probleme. Je possede une variable dont la valeur ne change pas et a laquelle accedent variable privee et statique [ par Kangourou_Nomade ] Bonjour,Je voudrais utiliser une variable statique dans une classe ( un logger). cette variable est un mutex qui me permettraitde ne pas ecrire dans m Synchronisation de threads [ par deck_bsd ] Yop à tous,Voila j'ai un prog avec un serveur multi thread et tous ces threads doivent tous modifier ou consulter une listebox dans le programme princ


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,123 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales