Gibt es Parallelitätsprobleme mit einem Thread, der von einem Index eines Arrays liest, während ein anderer Thread in einen anderen Index des Arrays schreibt, solange die Indizes unterschiedlich sind?java array thread-safety
z.B. (In diesem Beispiel nicht unbedingt für wirkliche Verwendung empfohlen, nur um meinen Standpunkt zu erläutern)
class Test1
{
static final private int N = 4096;
final private int[] x = new int[N];
final private AtomicInteger nwritten = new AtomicInteger(0);
// invariant:
// all values x[i] where 0 <= i < nwritten.get() are immutable
// read() is not synchronized since we want it to be fast
int read(int index) {
if (index >= nwritten.get())
throw new IllegalArgumentException();
return x[index];
}
// write() is synchronized to handle multiple writers
// (using compare-and-set techniques to avoid blocking algorithms
// is nontrivial)
synchronized void write(int x_i) {
int index = nwriting.get();
if (index >= N)
throw SomeExceptionThatIndicatesArrayIsFull();
x[index] = x_i;
// from this point forward, x[index] is fixed in stone
nwriting.set(index+1);
}
}
edit: dieses Beispiel critiquing ist nicht meine Frage, ich will wirklich nur, wenn Array Zugriff auf einen Index kennen, gleichzeitig Zugriff auf einen anderen Index, wirft Nebenläufigkeit Probleme, konnte nicht an ein einfaches Beispiel denken.
danke ... drat, ich wollte ein byte [] -Array verwenden und es sieht aus als gäbe es kein Atomic-Tier .... Ich denke, ich werde nur synchronisierte Methoden verwenden und es einfach halten. –
Wenn Sie viel mehr Lese- als Schreibvorgänge haben, sollten Sie sich vielleicht java.util.concurrent.locks.ReadWriteLock ansehen –
huh, interesting ... –