Thread le wait ne semble pas relocker
math 2000
Messages postés
2605
Date d'inscription
Statut
Membre
Dernière intervention
-
math 2000 Messages postés 2605 Date d'inscription Statut Membre Dernière intervention -
math 2000 Messages postés 2605 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'aimerais juste faire une simple discution entre threads pour m'entrainer
mais lorsque je récupère l'information avec mon pthread_cond_wait le second thread continue de s'exécuter .
par exemple la discution entre une personne qui demande quelque chose et l' autre qui l'offre me donne:
alors que le de rien ne devrais pas s'executer vu que le wait à reçu son signal et devrait relocker le mutex
voici le code je n'y comprend plus rien merci .
j'aimerais juste faire une simple discution entre threads pour m'entrainer
mais lorsque je récupère l'information avec mon pthread_cond_wait le second thread continue de s'exécuter .
par exemple la discution entre une personne qui demande quelque chose et l' autre qui l'offre me donne:
envoie moi un truc stp
debut de l'envoie
de rien
merci
alors que le de rien ne devrais pas s'executer vu que le wait à reçu son signal et devrait relocker le mutex
voici le code je n'y comprend plus rien merci .
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_mutex_t count_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t condition_var = PTHREAD_COND_INITIALIZER;
void *function1();
void *function2();
main()
{
pthread_t thread1, thread2;
pthread_create( &thread1, NULL, &function1, NULL);
pthread_create( &thread2, NULL, &function2, NULL);
pthread_join( thread1, NULL);
pthread_join( thread2, NULL);
exit(0);
}
void *function2()
{
pthread_mutex_lock( &count_mutex );
printf("envoie moi un truc stp \n");
pthread_cond_wait( &condition_var, &count_mutex );
printf("merci \n");
pthread_mutex_unlock( &count_mutex );
}
// Write numbers 4-7
void *function1()
{
pthread_mutex_lock( &count_mutex );
printf("debut de l'envoie \n");
pthread_cond_signal( &condition_var );
printf("de rien \n");
pthread_mutex_unlock( &count_mutex );
}
A voir également:
- Thread le wait ne semble pas relocker
- Updating biss key please wait ✓ - Forum TV & Vidéo
- Il semble bizarre puisque chez lui ✓ - Forum Loisirs / Divertissements
- Comment entrer le Key biss de la entv dans une télé stream system avec un démo i - Forum TV & Vidéo
- Votre monture semble ne pas vouloir avaler cette nourriture... ✓ - Forum Jeux vidéo
- Il semble que vous ne connaissez peut-être pas cette personne facebook - Forum Facebook
2 réponses
Bonjour,
Il me semble que tes fonctions sont mal définies.
Les routines du thread prenne un argument, un pointeur sur n'importe quoi. On passe donc les paramètres par un pointeur. Là, il faut lire la documentation de pthread.
Ensuite, il me semble que le mutex n'est jamais créé. Ça pourrait expliquer certaines choses...
Enfin, pthread_join prend en paramètre un tableau de threads. Il n'est d'ailleurs pas judicieux de faire à la suite :
Bref, il faut lire la documentation de pthread et éventuellement regarder les exemples qui vont avec.
Il me semble que tes fonctions sont mal définies.
void *function1();
void *function2();
Les routines du thread prenne un argument, un pointeur sur n'importe quoi. On passe donc les paramètres par un pointeur. Là, il faut lire la documentation de pthread.
Ensuite, il me semble que le mutex n'est jamais créé. Ça pourrait expliquer certaines choses...
Enfin, pthread_join prend en paramètre un tableau de threads. Il n'est d'ailleurs pas judicieux de faire à la suite :
pthread_join( thread1, NULL);Il faut plutôt attendre les deux ensemble; c'est d'ailleurs le but de la fonction. Il faut stocker les threads dans un tableau.
pthread_join( thread2, NULL);
Bref, il faut lire la documentation de pthread et éventuellement regarder les exemples qui vont avec.