Problem bei der Synchronisation von Threads

Alles rund um die Programmierung mit Qt
Antworten
KartoffelKiffer
Beiträge: 101
Registriert: 27. Februar 2008 15:59

Problem bei der Synchronisation von Threads

Beitrag 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
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Re: Problem bei der Synchronisation von Threads

Beitrag 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..
Antworten