Seite 1 von 1

Problem bei der Synchronisation von Threads

Verfasst: 1. November 2011 21:34
von KartoffelKiffer
Hallo,

ich habe ein paar Threads, die parallel Verzeichnisse auslesen sollen.

Je nachdem ob in dem Verzeichnis spezielle Datentypen liegen, dauert die Verarbeitung unterschiedlich lange.

Mein Wunsch ist es nun die Threads, die mit der Verarbeitung fertig sind, schlafen zu legen, bis alle anderen auch fertig sind. Dann sollen sie ein bestimmtes Interval abwarten und von vorne beginnen.

Im Producer-Thread habe ich einen Counter, der weiß wie viele Threads gestartet wurden. Jeder Thread sendet bei Abarbeitung ein Signal ab. Wenn nun n Threads das Signal emitiert haben, wobei n die Anzahl der Threads ist, dann weiß ich, alle Threads sind fertig.

Wie würdet ihr dieses Problem angehen?

Ich habe schon etwas mit QWaitConditions experimentiert, aber es nicht so hinbekommen, wie gewünscht.

Code: Alles auswählen

leseVerzeichnisseAus();
waitForOtherThreads();
sleep(interval);
So in etwa müsste die Lösung aussehen.

Ich hoffe mir kann hierbei geholfen werde.

Grüße, KK

Re: Problem bei der Synchronisation von Threads

Verfasst: 2. November 2011 08:18
von solarix
Wenn du ein "Producer-Thread" hast der alles kennt (Anzahl und Zustand der Threads), könnte doch auch dieser die Jobs mittels eines Signals neu starten. Dann hättest du quasi ein "Start"-Signal vom Producer sowie ein "ich-habe-fertig"-Signal von den Threads.

Von der Implementierung her ist das ja auch nicht so schwierig:
- der Producer startet bei Jobcount == 0 ein (Q)Timer. Bei Timeout erfolgt dann das "Start"-Signal an alle Threads.
- die Threads hängen einfach in der Eventloop (exec()) rum und reagieren nur auf das "Start"-Signal des Producers/Controllers..

hth..