Ich habe eine Situation, in der ein Thread Int aktualisiert und ein anderer zu einem bestimmten Zeitpunkt liest es. Also Single-Reader Single-Writer. Bisher habe ich volatile
int für diesen Zweck verwendet, aber da dies die vollständige Synchronisierung auf Speicherbarrieren erzwingt, habe ich über etwas anderes nachgedacht.Inkrementieren int-Zähler mit Sichtbarkeit
Ein Ansatz wäre AtomicInteger.incrementAndGet()
aber ich denke, das hat genau die gleiche Wirkung und wird tatsächlich langsamer
Ein anderer Ansatz wäre AtomicInteger.lazySet
mit zusätzlichen nichtflüchtigen für Schriftsteller Zähler zu verwenden. Also im Grunde würden wir
private int counter;
public AtomicInteger visibleCounter = new AtomicInteger();
private void write() {
counter++
visibleCounter.lazySet(counter)
}
// called by reader
public int isCountEqual(int val) {
return val == visibleCounter.get()
}
als naive "lazyIncrement
" haben.
Wäre es tatsächlich performanter als einfaches Inkrement von volatile
Int von Writer?
Dank
Das klingt wie eine sehr seltsame Vorgehensweise nicht sehr falsch zu sagen, warum brauchen Sie, dies zu tun ? Haben Sie ein Problem in Ihrer Anwendung, das damit zusammenhängt? –
Also ist es kein Problem für Sie, wenn der Leser einen alten Wert liest? – Kayaman
Nein, es ist kein Problem, solange irgendwann 10ms usw. Ich werde das richtige Ergebnis erhalten, d. H. Val == visibleCounter – ivenhov