Synchronisation

Signaler
Messages postés
31
Date d'inscription
mercredi 10 avril 2013
Statut
Membre
Dernière intervention
10 novembre 2014
-
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
-
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.

4 réponses

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

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

ciao...
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
109
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
Messages postés
31
Date d'inscription
mercredi 10 avril 2013
Statut
Membre
Dernière intervention
10 novembre 2014

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.
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
109
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