Der nächste Code druckt normalerweise BA aber manchmal kann es BBAA, BAAB, ... drucken Wie ist es möglich, zwei A oder B damit zu bekommen ?! Dieser Code druckt jedoch nie drei A oder B. Beide Funktionen (produzieren und konsumieren) führen viele Threads aus. Vielen Dank im Voraus.Odd Thread Verhalten
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);' bewirkt ein fehlerhaftes Verhalten; Tue es nicht –
Ich sehe 2 nicht verwandte Mutexe. Sieht so aus, als könnten Sie Ihre Synchronisierungsprozeduren entfernen und das gleiche Ergebnis erhalten. –
Was sind die Verweise auf zwei verschiedene Mutex? Wenn der Code versucht, die Variable 'permission' zu schützen, sollten alle Mutex-Referenzen auf den gleichen Mutex verweisen. Vorschlagen: 'for (;;) {while (! Erlaubnis); pthread_mutex_lock (&mr1); set_permission (1); pthread_mutex_unlock (&mr1);} 'der Consumer-Thread würde SEHR ähnlich aussehen und würde den gleichen Mutex verwenden – user3629249