While many software projects requiring some form of parallelisation resort to standard synchronisation mechanisms offered by a programming language or a standard library of choice, other synchronisation techniques exist. This paper presents predicate-based synchronisation constructs and discusses the possibilities of their detection and static analysis.
Die Entwicklung und Wartung von nebenlaufigen Programmen ist schwierig und fehleranfallig. Fehlende oder falsche Synchronisation kann zu komplizierten Fehlerszenarien fuhren, die dem Quelltext nur schwer anzusehen sind, jedoch katastrophale Auswirkungen auf die Programmausfuhrung haben konnen. Durch statische Programmanalyse konnen alle Quelltextpositionen identifiziert werden, an denen bestimmte Fehler, wie z.B. Data Races, auftreten konnen. Ein Data Race existiert in einem nebenlaufigen Programm, wenn mehrere Threads auf eine gemeinsam genutzte Variable (Shared Variable) zugreifen und folgendes gilt: (1) mindestens ein Thread schreibt auf die Variable und (2) die einzelnen Zugriffe finden ohne Synchronisation statt. Data Races konnen zu inkonsistenten Daten im Speicher fuhren und schwerwiegende Folgen fur die korrekte Ausfuhrung des Programms haben. Fuhren beispielsweise zwei Threads gleichzeitig die Operation g = g + c fur eine globale Variable g aus, so hangt der resultierende Wert von g davon ab, in welcher Reihenfolge die beiden Threads den alten Wert von g lesen und den neuen Wert in den Speicher ablegen. Zur Erkennung von Data Races wurden in den letzten Jahren eine Vielzahl von Verfahren erforscht. In dem Projekt Bauhaus [2] wurde ein Verfahren zur statischen Analyse basierend auf dem LocksetAlgorithmus [1] implementiert. Aufgrund der prinzipiellen Unentscheidbarkeit des Problems muss eine statische Analyse jedoch die Menge der tatsachlichen Data Races uberschatzen. Es wird eine Anzahl an falsch positiven Warnungen erzeugt, die in keiner realen Ausfuhrung des analysierten Programms tatsachlich eintreten konnen. Fur den praktischen Einsatz der Analysen ist deshalb ein Werkzeug notig, das die Warnungen in geeigneter Form fur einen Benutzer aufbereitet. Der Benutzer muss manuell untersuchen konnen, welche Warnungen tatsachliche Data Races darstellen und welche gefiltert werden sollten. Zu diesem Zweck wird in diesem Papier das Werkzeug RaceVis vorgestellt. Es wurde als Teil des Bauhaus-Projekts als Plugin fur die Entwicklungsplattform Eclipse implementiert.