Synchronisation

RMEU Messages postés 31 Date d'inscription mercredi 10 avril 2013 Statut Membre Dernière intervention 10 novembre 2014 - 10 oct. 2014 à 16:35
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 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.

4 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 oct. 2014 à 17:27
Un event est parfait pour synchro de threads.

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

ciao...
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
10 oct. 2014 à 18:43
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
0
RMEU Messages postés 31 Date d'inscription mercredi 10 avril 2013 Statut Membre Dernière intervention 10 novembre 2014
13 oct. 2014 à 12:11
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.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 13/10/2014 à 12:28
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
0
Rejoignez-nous