Synchronisation

Messages postés
31
Date d'inscription
mercredi 10 avril 2013
Statut
Membre
Dernière intervention
17 novembre 2014
- - Dernière réponse : cptpingu
Messages postés
3801
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 novembre 2019
- 13 oct. 2014 à 12:24
Bonjour,

Je voudrais savoir comment synchroniser 2 threads en utilisant un mutex.

Je sais déjà que je dois créer ce mutex et ensuite faire un WaitForSingleObject sur ce mutex. Quand je l'ai obtenu, je crée la thread secondaire qui elle aussi attend sur le même mutex. Quand je veux lui signaler qu'elle doit effectuer un traitement je dois signaler le mutex (cela revient à faire le Release du Mutex). Quelle fonction dois-je utiliser pour pour libérer ou signaler le mutex ? Les autres solutions sont aussi les bienvenues.

Merci d'avance pour vos réponses.
Afficher la suite 

4 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13
0
Merci
Un event est parfait pour synchro de threads.

CreateEvent()
SetEvent()
ResetEvent()
...
CloseHandle()

ciao...
Commenter la réponse de BruNews
Messages postés
3801
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 novembre 2019
90
0
Merci
Bonjour.

Quelle langage utilises-tu ? Si c'est du C++, tu peux tout simplement utiliser std::thread et std::mutex (avec std::lock_guard), ça fait partie du standard, et ça sera portable sur n'importe quel OS.

Peux-tu aussi préciser la finalité ? Que cherches-tu à réaliser ? Est-ce un pattern type: producteur-consommateur ?

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Commenter la réponse de cptpingu
Messages postés
31
Date d'inscription
mercredi 10 avril 2013
Statut
Membre
Dernière intervention
17 novembre 2014
0
Merci
Bonjour,

Le but est simple : je veux créer une thread secondaire qui traite les messages que la thread principale insère dans une queue mémoire. Commnent, en windows, protégér cette queue et comment prévenir la thread secondaire que la thread principale a inséré un message à traiter. Si tu me dis que les Posix Threads fonctionnent en windows, alors le problème est résolu.
Commenter la réponse de RMEU
Messages postés
3801
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 novembre 2019
90
0
Merci
Si tu es en C++, et que tu as accès à C++11, alors tout est dans le langage. Si tu es en C++03, tu n'y a pas accès, et il te faut alors utiliser les boost::thread (et tout ce qui va avec). Boost et C++ s'utilisent de la même manière (il faut juste mettre "boost::" au lieu de "std::").

Si tu es en C, les pthread ne sont disponibles que via une bibliothèque externe. Ce qui n'est pas très pratique.

C'est une problématique classique de producteur-consommateur que tu as. Tu peux trouver de nombreuses implémentations aisément, comme ici:
https://codereview.stackexchange.com/questions/39199/multi-producer-consumer-queue-without-boost-in-c11

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Commenter la réponse de cptpingu