Sind Array-Elemente zwischen Arbeitern korrekt veröffentlicht?Gleichzeitige Array-Zugriff durch Executor-Service
glaube, ich habe ein großes Array (jeglicher Atomdatentyp, also nicht long
oder double
)
- Ich schaffe einen Arbeiter, der das Array füllt, die ich übergeben, um es contructor,
- I vorlegen der Arbeiter zu einem Executor, und warten Sie, bis es fertig ist (zB mit
future.get()
). Der Arbeiter gibt nichts zurück. Es füllt nur mein Array. - Dann sofort erstellen und senden Sie einen anderen Worker mit dem gleichen Array in seinem Konstruktor. Sieht es die neuesten Werte?
Mit anderen Worten, es garantiert, dass das letzte Schreiben des früheren Arbeiter geschieht also vor der ersten Lesen des nächsten Arbeiter?
Soll ich stattdessen (oder für Best Practice oder etwas) der erste Arbeiter das Array zurückgeben, obwohl die Referenz die gleiche ist wie die, die ich bereits habe?
[Bearbeiten] Einige Hintergrund: Ich verwende entweder byte
Arrays oder short
Arrays, die Bilder darstellen und jeweils bis zu 500.000.000 Elemente verwenden. Ich führe einfache Arithmetik für jedes Element durch.
klingt wie Sie etwas werden könnte, zu tun, die besser wie ConcurrentLinkedQueue mit einer Queue-Struktur funktionieren würde. –
Es ist kein Fifo. Der zweite Arbeiter benötigt einen wahlfreien Zugriff auf das Array. –
fand ich so etwas wie dies in einigen Tutorial: http://www.ibm.com/developerworks/library/j-jtp03304/jsr133.gif aber ich bin nicht sicher, wie dies von globalen Variablen in dem Fall zu interpretieren. Ist * alles * mit internem RAM synchronisiert, wenn ein Thread entsperrt ist und ein anderer sperrt? Blockiert der Executor intern so oder nicht? –