Ich möchte Verwendung von Bedingungsvariablen in C ein einfaches multithreaded Programm schreiben, machenErklärung, warum Bedingungsvariablen in C funktioniert nicht richtig
I Haupt-Thread (Thread A) haben wollen, die für 5 Sekunden und dann wache auf wartende Clients (Therad B, möglichst viele), die eine Nachricht drucken. Dies sollte die ganze Zeit wiederholt werden.
Ich habe bereits das Handbuch gelesen, aber ich verstehe nicht, warum das nicht funktioniert. Nehmen wir an, dass ich diese Variablen an alle Threads über Zeiger gegeben haben (richtig, ich habe überprüft, dass):
pthread_mutex_t* mutex;
pthread_cond_t* cond;
int* variable;
Ich habe den folgenden Code:
THREAD A (Schlafen):
while(1)
{
lockMutex(mutex);
(*variable) = 1;
pthread_cond_broadcast(cond);
unlockMutex(mutex);
sleep(5);
lockMutex(mutex);
(*variable) = 0;
pthread_cond_broadcast(cond);
unlockMutex(mutex);
}
THREAD B (Druck):
while(1)
{
lockMutex(mutex);
while((*variable) == 1)
pthread_cond_wait(cond, mutex);
unlockMutex(mutex);
fprintf("Active thread! Number: %d\n", id);
lockMutex(mutex);
while((*(variable))==0)
pthread_cond_wait(cond, mutex);
unlockMutex(mutex);
}
ich habe keine Deadlock , aber leider funktioniert das nicht wie erwartet. Kann mir jemand eine Erklärung geben, was soll ich tun? Ich wäre dankbar für jede Hilfe.
Was wird erwartet? Was passiert eigentlich? – nicomp