002
09.06.2008, 23:22 Uhr
FunnyDingo
|
Wie könnte so etwas denn aussehen? Hab da eine Idee, dazu müsste ich aber etwas ausholen:
Mein Haupt-Thread macht eigentlich nichts anderes als 4 Threads zu starten und auf deren Beendigung zu warten (warum ich das nicht mit fork mache: ich muss die Threads "aufwecken" können).
Nun wäre meine Idee ein Strukt mit Bools pro Thread die auf True gesetzt werden wenn der Thread startet und im Exception Handling auf False, bevor pthread_exit() aufgerufen wird.
Aber dann dürfte der Main-Thread ja nicht mehr via pthread_join auf die Beendigung eines Threads warten (so mache ich das bisher, was mir eigentlich auch nicht gefällt), sondern müsste auf Änderungen im Strukt achten, aber das geht ja wieder nicht.
Mein Problem mit den Threads ist: ich finde Tonnen an Infos zu Thread-Programmierung, aber immer nur im Zusammenhang mit Threads die Berechnungen o.ä. machen. Bei mir arbeiten die Threads aber ständig, da ich sie wie gesagt "aufwecken" muss.
Warum aufwecken? Nun ja, ein Thread dient als "Listen Thread" auf einem Socket, einer als "Sender Thread" und der dritte als "Worker Thread". Wenn nun der Listen Thread Daten empfangen hat, schreibt er diese in eine Queue und weckt den Worker (der via pthread_cond_wait "schläft") via pthread_cond_broadcast auf. Dann kann der Worker seine arbeiten erledigen während der Listener schon wieder zur Verfügung steht. Sobald der Worker alles erledigt hat, schreibt er das Result in eine Queue und weckt nun den Sender auf.
Ich habe mich für diesen Weg entschieden, weil ich die Threads halt nur arbeiten lassen möchte, wenn in ihrer Queue Daten drin stehen und ich wollte sie nicht in einer schleife die Queue prüfen lassen.
Vielleicht kennt ja jemand einen besseren Weg, der mir mein Synchronisierungsproblem auch erleichtern würde. Ich hatte bei fork das Problem, dass ich keinen Weg gefunden habe zu sagen: "Warte hier bis du wieder benötigt wirst". Ansonsten wären eigene Child Prozesse ja der bessere Weg. -- "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)
Meine Website: http://www.funnydingo.de Dieser Post wurde am 09.06.2008 um 23:27 Uhr von FunnyDingo editiert. |