Threadkommunikation

Moin!

Ich muß die Kommunikation zwischen zwei Threads regeln. Der eine Thread ist durch das Hauptprogramm gegeben, dort wird ein zweiter gestartet, der asynchron eine Arbeit erledigt und danach seinen Dienst quittiert. Allerdings muß Thread1 davon in Kenntniss gesetzt werden.
Ich kenne spontan nur zwei Möglichkeiten, die beide auf das selbe hinauslaufen:
Eine gemeinsame, gesicherte Zustandsvariable oder eine stream-verbindung. Beides müsste aber ge-„pollt“ werden, also ständig abgefragt, ob es denn nun soweit ist. SInd das wirklich die einzigen Lösungen?

Moin!

Ich muß die Kommunikation zwischen zwei Threads regeln. Der
eine Thread ist durch das Hauptprogramm gegeben, dort wird ein
zweiter gestartet, der asynchron eine Arbeit erledigt und
danach seinen Dienst quittiert. Allerdings muß Thread1 davon
in Kenntniss gesetzt werden.

Das macht man bei POSIX threads über ein „join“ (pthread_join). D.h. ein thread wartet auf das Ende eines anderen. Da wird nichts gepollt, und die Warterei kostet keine nennenswerten CPU Zyklen.

Gruß

Fritze

Ich habe natürlich etwas wichtiges vergessen … =|
Der Ursprungsthread muß weiterlaufen, die Benachrichtigung über das Ende von Thread2 muß also vollkommen asynchron geschehen.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hiho!

Vielleicht bin ich ja ein wenig blauäugig, aber ich denke mir das folgendermaßen:
Im Thread-1 erzeugst Du eine Bool-Variable „Therad2Active“ die du eine Public-Methode „SetThread2Active“ von Thread-2 aus entsprechend setzen kannst. Somit bräuchtest Du kein polling.
Um auf Nummer sicher zu gehen könntest Du noch eine entsprechende Variable im Main-Programm integrieren, sodass Du auch beim Start von Therad-1 eine eventuelle Aktivität von Thread-2 berücksichtigen kannst.

Naja, so denk ich mir das zumindest. Vielleicht bin ich ja etwas zu blauäugig, aber mir erscheint es logisch.

Gruß Marco

Hi serethos!

Wie wäre es damit: Wenn der Arbeits-Thread fertig ist, schickt er eine Nachricht an den Hauptthread. Der Hauptthread kann sich also die ganze Zeit um andere Aufgaben kümmern. Erst, wenn er die Nachricht vom Arbeits-Thread empfängt, muß er darauf reagieren.

Gruß
Uwe

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]