Wenn ich eine Variable mit dem volatile
Schlüsselwort deklariere, ist es jetzt absolut Thread-sicher, oder sollte ich noch in einigen Fällen darauf zugreifen über Interlocked
Klasse oder lock
Aussage?Erreichbarkeit flüchtige Variablen
Antwort
Das Schlüsselwort volatile
fügt nur eine vollständige memory barrier - garantiert, dass alle Lese-Schreib-Anweisungen in der CPU-Pipeline abgeschlossen sind. Für den Endanwender ist die Sichtbarkeit in anderen Threads garantiert, denn wenn ein Schreibvorgang abgeschlossen ist, wird das Ergebnis in den Cache der CPU (und gegebenenfalls in den RAM) übertragen. Sie sollten sich nicht darum kümmern, während Sie die App auf den neuesten Intel-CPUs laufen lassen - sie garantieren Barrieren beim Lesen und Schreiben ohne zusätzliche explizite Anweisungen.
Die Interlocked
andererseits sperrt den CPU-Bus durch die angegebene Speicheradresse und ermöglicht es Ihnen, eine atomare Operation auf einer Variablen durchzuführen, so dass kein anderer CPU-Kern gleichzeitig andere Lese-Schreib-Operationen mit derselben Speicheradresse ausführen kann Zeit. Diese atomaren Operationen sind eigentlich Befehle der x86-CPU-Architektur-Familie, deshalb haben Sie eine begrenzte Anzahl von Operationen: hinzufügen, inkrementieren, dekrementieren, austauschen, vergleichen-Austausch.
Sowohl volatile
als auch Interlocked
beziehen sich auf CPU-Funktionen, aber gemeinsame Synchronisationsgrundelemente - kritischer Abschnitt, Spin Lock, Mutex, Semaphor, Auto/Manuelles Reset-Ereignis - sind darüber hinaus aufgebaut.
- 1. Wo sind flüchtige Variablen gespeichert?
- 2. So deklarieren Sie flüchtige Variablen in Swift
- 3. Wie dekompiliere ich flüchtige Variablen in Java?
- 4. Zugriff auf flüchtige Felder durch lokale Variablen
- 5. flüchtige
- 6. Flüchtige Seltsamkeit
- 7. Flüchtige Funktion
- 8. Flüchtige Variable
- 9. flüchtige Überlastung?
- 10. flüchtige vs threadLocal in Java
- 11. Wie ohne flüchtige
- 12. Facebook Messenger Erreichbarkeit
- 13. Netzwerk Erreichbarkeit mit UIWebView
- 14. Erreichbarkeit prob ios6
- 15. C# flüchtige Doppel
- 16. iOS Erreichbarkeit funktioniert nicht
- 17. C# flüchtige Array-Elemente?
- 18. Erreichbarkeit hängt Anwendung
- 19. Absturz in Erreichbarkeit API
- 20. Erreichbarkeit in Grafik - C
- 21. Apples Erreichbarkeit ohne ARC
- 22. Erreichbarkeit Problem mit Rahmen
- 23. Prüfen auf Server Erreichbarkeit
- 24. Erreichbarkeit und IPv6
- 25. Flüchtige Immobilien in Kotlin?
- 26. Erreichbarkeit funktioniert nicht mehr
- 27. Unterbrochene Synchronisation ohne flüchtige Variable
- 28. Detect die Erreichbarkeit im Hintergrund
- 29. WCF-Service und inkonsistente Erreichbarkeit
- 30. Erreichbarkeit: Flugmodus mit Wifi ON
'volatile' verhindert nur eine Art von Optimierungen https://msdn.microsoft.com/en-us/library/x13ttww7.aspx" ... Felder, die als flüchtig deklariert sind, unterliegen nicht den Compiler-Optimierungen, die den Zugriff durch annehmen ein einzelner Thread ... "; 'volatile' ist keine Silberkugel und Sie müssen" ... in einigen Fällen immer noch über Interlocked-Klasse oder Lock-Anweisung darauf zugreifen " –