Menü

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.

Lesezeit: 1 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 1 Beitrag
Von

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.

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)