Le code suivant imprime normalement BA mais parfois il peut imprimer BBAA, BAAB, ... Comment est-il possible d'obtenir deux A ou B avec? Cependant, ce code n'imprime jamais trois A ou B. Les deux fonctions (produire et consommer) exécutent beaucoup de threads. Merci d'avance.Comportements de threads impairs
int permission;
void set_permission(int v) {
permission = v;
printf("%c", v + 'A');fflush(stdin);
}
void* produce(void*) {
for (;;) {
pthread_mutex_lock(&mr1);
set_permission(1);
while (permission == 1);
pthread_mutex_unlock(&mr1);
}
}
void* consume(void*) {
for (;;) {
pthread_mutex_lock(&mr2);
while (permission == 0);
set_permission(0);
pthread_mutex_unlock(&mr2);
}
}
'fflush (stdin);' provoque un comportement défini; ne le fais pas –
Je vois 2 mutex non apparentés. On dirait que vous pouvez supprimer vos procédures de synchronisation et obtenir le même résultat. –
Quelles sont les références à deux mutex différents? Si le code essaie de protéger la variable 'permission' alors toutes les références mutex doivent être au même mutex. Suggérer: 'for (;;) {while (! Permission); pthread_mutex_lock (&mr1); set_permission (1); pthread_mutex_unlock (&mr1);} 'le thread consommateur serait très similaire AND utiliserait le même mutex – user3629249