Ich habe eine Frage zu Race Conditions und simultanen Schreiben.Race condition und entriegelt schreiben
Ich habe eine Klasse, auf die Objekte aus verschiedenen Threads zugegriffen werden. Ich möchte einige Werte nur bei Bedarf berechnen und das Ergebnis zwischenspeichern. Aus Performance-Gründen würde ich lieber keine Schlösser benutzen (bevor jemand fragt - ja, das ist in meinem Fall relevant).
Dies ist eine Race-Bedingung. Die Objekte sind jedoch konstant und werden nicht geändert. Wenn also unterschiedliche Threads Werte berechnen, die zwischengespeichert werden sollen, sind sie in meinem Anwendungsfall garantiert identisch. Wäre es sicher, diese Werte ohne Sperren zu schreiben? Oder ist es im weiteren Sinne sicher, identische Inhalte aus verschiedenen Threads in den Speicher zu schreiben, ohne zu sperren?
Die geschriebenen Werte sind vom Typ bool und double und die betreffenden Architekturen können x86 und ARM sein.
EDIT: Danke an alle für ihre Eingabe. Ich habe mich schließlich entschieden, einen Weg zu finden, der kein Caching beinhaltet. Dieser Ansatz scheint einem "Hack" sehr ähnlich zu sein, und es gibt das Problem, eine Flag-Variable zu verwenden.
Ich bezweifle, dass C++ es garantiert, aber zumindest mit moderner Hardware ist es schwer vorstellbar, wie ein Problem entstehen würde. –
Jede Schreiboperation für ein Primitiv ist atomar. Es sollte also keinen Unterschied machen, ob viele Threads gleichzeitig in dieselbe Gruppe von Feldern schreiben. – Alain
"Wenn also verschiedene Threads Werte berechnen, die zwischengespeichert werden sollen, sind sie in meinem Anwendungsfall garantiert identisch." ... Das ist seltsam. Wenn Sie garantieren können, dass die geschriebenen Werte identisch sind, warum sollten Sie sie gleichzeitig schreiben? Oder besser, warum schreibe ich sie mehr als einmal? –