Threads Zugriff auf Array-Teile verweigern

multimolti

Erfahrenes Mitglied
Hallo!

Ich habe gestern mal ein Programm geschrieben, in dem mehrere Threads Daten in ein gleiches Array schreiben. Jeder Thread greift allerdings nur auf ein Element des Arrays zu einem Zeitpunkt zu.
Jetzt passiert es leider manchmal (3 Threads auf 19.000 Array-Elemente, also nicht sehr oft), dass zwei Threads gleichzeitig einen Wert auslesen, daraus ihre Schlüsse ziehen und dann den Wert des anderen überschreiben.
Wie kann ich, wenn grade Thread 1 auf das Element array[x] zugreift, nur diese Element blockieren, so dass jeder andere Thread, der eventuell darauf zugreifen will, kurz warten muss?
Ich habe mir schon mal das Lock-Keyword angeschaut, verstehe das aber nicht wirklich.

Kann mir jemand helfen?
 
Hallo,

das einfachste wäre wohl, wenn du die Array Bereiche in denen die Threads aktiv sein sollen in der Programmlogik überschneidungsfrei definierst.

Sprich
Thread1 darf von 0-5000 (inklusive)
Thread2 darf von 5001 - 10000 (inklusive)
Thread3 darf von 10001 - 19000 (inklusive)

etc.

Gruß Tom
 
Nee, das funktioniert nicht. Jeder Thread muss überall hinschreiben können, da die alle an einer großen Rechnung rumrechnen, die ich mit meinen 4 Kernen beschleunigen will.

Edit: Ich habe jetzt mal überall da, wo ein Thread in das Array schreiben würde, ein "lock" hingemacht, aber dadurch wird der Code richtig lahm, sogar noch langsamer als Single-Threaded (Single: 5 Sek, Threaded: 1.8 Sek, Threaded + lock: 15 Sek). Außerdem will ich ja auch nicht den Schreibe-Code blockieren, sondern nur den Zugriff auf ein bestimmtes Element des Arrays.
 
Zuletzt bearbeitet:
Zurück