2016-05-03 16 views
2

Angenommen, ich habe eine Datenstruktur in einem Atom und möchte zuerst ein Element auswählen und dann dieses Element aktualisieren. Ich könnte beide Operationen innerhalb eines einzigen Tauschs machen! Das ist korrekt in Bezug auf Race Conditions und andere unangenehme Dinge, aber erlaubt nicht viel Nebenläufigkeit. Gibt es eine bessere Lösung?Aufteilen eines Elements innerhalb eines Atoms auswählen und aktualisieren, ohne die Nebenläufigkeit zu beeinträchtigen.

Im folgenden Beispiel wird der Code stark verlangsamt, da der nachgeschlagene Wert regelmäßig geändert wird (alle 50ms) und somit den Swap benötigt! zurückrollen. Mit anderen Worten: Ich versuche, das Element zu trennen und zu aktualisieren, ohne dabei die Sicherheit der Nebenläufigkeit zu opfern.

+0

Können Sie uns mehr über die Bedingungen sagen, unter denen Sie die Aktualisierungen durchführen möchten? –

+0

Wenn sich das Atom so häufig ändert, wird der LookUp-Wert schnell ungültig. Die Frage ist also vielleicht: Was willst du machen, wenn es ungültig wird? Möchten Sie die Berechnung erneut ausführen und es erneut versuchen? Wenn ja, ist dein Code am besten. Aber wenn du lieber abbrechen würdest, sobald du entdeckst, dass es von einem anderen Thread ungültig gemacht wird, der das Atom aktualisiert, könnte es bessere Alternativen geben. –

Antwort

2

Soweit ich es verstehe, ist es nicht möglich. Um eine konsistente Ansicht der Daten zu erhalten, müssen Sie eine Suche durchführen und eine Aktualisierung in einer einzelnen "Transaktion" durchführen (in Anführungszeichen, weil transaction nicht gut auf Atommanipulationen angewendet werden kann).

Verwandte Themen