Wider Data Races: Thread Sanitizer für Swift ist nun auf Linux verfügbar
Mit dem Thread Sanitizer können Swift-Entwickler ihre Mulithreaded-Anwendungen vor Data Races schützen.
- Alexander Neumann
Der Thread Sanitizer ist ein LLVM-basiertes Tool zur Fehlersuche für die Programmiersprachen Swift und C, das Code während der Kompilierung untersucht und Data Races während der Ausführung erkennt. Das Werkzeug ist jetzt auch unter Linux als Teil von Swift 5.1 verfügbar, bislang aber nur als Teil der aktuellen Development Snapshots.
Swift garantiert Speichersicherheit nur in Single-Threaded-Umgebungen. Konflikte bei den Zugriffen in Multithreaded-Code führen jedoch zu Data Races, was wiederum unerwartetes Verhalten verursacht und im schlimmsten Fall zur Beschädigung des Speichers führen kann, wodurch die Speichersicherheit von Swift nicht gewährleistet werden kann.
Wie man den Thread Sanitizer nutzt
Um den Thread Sanitizer nutzen zu können, müssen Entwickler das Flag -sanitize=thread compiler
verwenden und sicherstellen, dass das Programm im Debug-Modus läuft. Der Thread Sanitizer stützt sich darauf auf die Debug-Informationen, um die gefundenen Probleme zu beschreiben. Das Werkzeug lässt sich mit folgendem Swift-Compiler-Aufruf auf der Kommandozeile aufrufen:
swiftc -g -sanitize=thread
Da der Thread Sanitizer derzeit wohl am besten mit nicht optimiertem Code funktioniert, der mit Debug-Informationen erstellt wird, sollten Entwickler entweder Compiler-Flags zur Optimierung weglassen oder -Onone
verwenden, um eine bereits vorhandenes Optimierungslevel zu überschreiben.
Er lässt sich zudem via swift build -c debug --sanitize=thread
mit dem Swift Package Manager verwenden. Hier sollte man das test
-Target (anstelle von build
) nutzen, um die Tests des Pakets mit dem aktiviertem Thread Sanitizer auszuführen. Wichtig ist schließlich, dass die Tests mit Multithreading-Code verwenden, da der Thread Sanitizer sonst keine Data Races findet. Mehr Informationen finden Entwickler im Blog der Swift-Entwickler.
(ane)