Liebe Experten,
ich möchte eine umfangreiche Rechenaufgabe auf viele Kerne einer CPU verteilen, also mache ich mehrere Threads.
Bsp.: Ich suche die "schönste" (wie auch immer) Zahl im Bereich 1... 1 Million, also teile ich das in 1000er-Pakete. Ich starte Thread 1 für 1..1000, dann Thread 2 für 1001..2000 usw.
Jetzt kommt das Problem: Wenn alle Threads beschäftigt sind, dann muss der organisierede Thread warten. Nehme ich "waitfor" auf Event, Mutex, Semaphore. Mein Problem liegt in den Rechen-Threads: Der sieht ja etwa so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| Procedure Excecute; REPEAT Suche_schönste_Zahl_im Bereich; Setze Event/Mutex/Semaphore; suspend; UNTIL ewig; END; |
NUN: Was passiert, wenn zwischen "Setze Event/Mutex/Semaphore" und "suspend" ein Threadwechsel erfolgt? Der übergeordnete organisierende Thread erwacht aus seinem "waitfor", findet aber keinen Thread, der "suspended" ist. Selbst wenn ich eine eigene Variable einrichte und abfrage, dann würde ja das Resume ins Leere laufen.
Klar, mir fallen work-arounds ein, aber das muss doch vom Ansatz her besser gehen. In den reichlich verfügbaren Texten im Internet habe ich nichts zu dieser Frage finden können.
Aber vielleicht ist ja auch mein Ansatz vollkommen falsch???? Evtl. besser den Thread terminieren und jeweils neu starten??? Oder gibt es außer Event, Mutex, Semaphore bessere Alternativen???
Im Prinzip sind solche Aufgagen heute bei Multi-Core-Anwendungen für aktuelle Prozessoren doch dauernd zu lösen. Somit hoffe ich auf Tipps und Links auf entsprechende Seiten.
Beste Grüße GuaAck
Moderiert von Martok: Delphi-Tags hinzugefügt