Auf einer Quad-Core-Maschine, ich erwäge die Parallelisierung von C# /. NET-Algorithmus, die mehrere Threads das kleine int [] -Array gleichzeitig lesen. Bisher scheint es recht gut zu funktionieren, aber ich bin mir nicht sicher, wo angegeben wird, dass gleichzeitige Lesevorgänge in einem Array in .NET Thread-sicher sind. Irgendwelche Zeiger?Gleichzeitige Lesezugriff auf ein int [] Array: Ist es sicher? Ist es schnell?
Dann frage ich mich auch, ob dieser Ansatz wirklich effizient ist? Gibt es Situationen, in denen es besser ist, die Eingabedaten für jeden Thread zu duplizieren, so dass es kein gleichzeitiges Lesen gibt und jedes Array (vielleicht?) Die Gelegenheit erhält, in der Nähe der Affinitäts-CPU zwischengespeichert zu werden?
Irgendwelche Gedanken zu den Best Practices in Bezug auf Multicore-CPUs?
Ich stimme Ihnen von ganzem Herzen zu, dass unveränderliche Daten Thread-sicher sind. Manchmal ist es jedoch schwierig festzustellen, ob sich die Daten nicht ändern. Zum Beispiel kann eine augenscheinliche Leseoperation (oder, sagen wir mal, eine Abfragemethode) für ein Objekt intern einen Schreibvorgang verursachen. Da muss man immer auf der Hut sein. Bei Arrays jedoch: Das Lesen des Arrays wird es definitiv nicht ändern. – Steven
@Steven stimmen zu, dass Sie nicht immer wissen können, ob etwas unveränderlich ist. Aber ich denke, dein Beispiel ist einfach schlechtes Design. Ich glaube, dass unveränderliche Daten (besonders wenn sie geteilt werden) ausdrücklich als solche entworfen werden sollten. –
@Marthinho: Du hast keine Ahnung, wie viel schlechtes Design ich in meinem Träger gesehen habe :-) Es hat mich zu einem zwanghaften, verdächtigen Entwickler gemacht. Ich vertraue niemandem, nicht einmal ich selbst. Trotzdem stimme ich allem zu, was Sie hier gesagt haben. – Steven