2016-10-19 2 views
0

Szenario: Ich habe ein großes Stück Code geschrieben, das auf 2 parallelen Threads läuft, die in Code identisch sind und nur unterschiedliche Daten verarbeiten. Ich sehe nicht-deterministische Ergebnisse. Wenn ich einen der 2 Threads deaktiviere, werden die Ergebnisse deterministisch. Innerhalb dieses Codes verwende ich einige statische Inline-Funktionen (Hauptgrund: es sind kleine Funktionen, die ich hier und dort brauche, für die ich einfach den Code in den Übersetzungseinheiten dupliziere, wo sie benötigt werden), und ich würde gerne verstehen, ob sie das tun könnte eine mögliche Ursache für mein Problem sein.Sind statische Inline-Funktionen threadsicher?

Sind statische Inline-Funktionen in C threadsicher? Andersherum gesagt, wenn sie keine statische Variable im Inneren haben, sondern nur einige lokale Variablen und die Eingabeparameter, verursacht ein gleichzeitiger Aufruf von den zwei Threads unvorhersehbares Verhalten?

+0

Dinge, die nicht threadsicher sind, sind Dinge, die sich ändern können. Code ändert sich nicht (unter normalen Umständen), aber Variablen tun es oft. – xaxxon

Antwort

2

Nein, das sollte wirklich in Ordnung sein.

Ob eine Funktion inline ist oder nicht, sollte dies nicht beeinflussen, da es sowieso nur Code ist.

Ist das Verhalten in Bezug auf tatsächliche In-Memory-Daten (Ergebnisse) oder "nur" Dinge wie Timing und Reihenfolge von Ereignissen nicht deterministisch?

Schreiben Sie vielleicht in die Parameter, indem Sie versehentlich ein Datenrennen erstellen?

+0

Ergebnisse sind anders. Ich schreibe in die Parameter, aber sie sind Adresse unterschiedlich für die 2 Threads oder Adressen von Variablen lokal für eine andere Funktion, so denke ich, es sollte sicher sein. Haben Sie ein kurzes Beispiel für Code, der zu einem Datenrennen führen könnte? – Antonio

+0

"Adressen von Variablen lokal zu einer anderen Funktion"? Nicht eine Funktion, die die Eltern von Threads ist, hoffe ich? Das würde die Adresse in beiden Threads natürlich gleich machen. Aber ich gehe hier offensichtlich blind im Dunkeln. – unwind

+0

Nein, das sollte nicht der Fall sein. Ich muss weiter untersuchen ... – Antonio

0

Sind statische Inline-Funktionen in C threadsicher?

Ja. Statische Inline-Funktionen haben keinen Einfluss auf die Fadensicherheit. Aber wenn Sie statische Variablen verwenden, dann müssen Sie vorsichtig sein.

wenn sie keine statische Variable innerhalb, aber nur einige lokale Variablen und die Eingangsparameter, wird ein gleichzeitiger Anruf von den Fäden 2 unvorhersehbares Verhalten verursachen?

Wenn Sie eine lokale Variable verwenden, haben Sie kein Problem. Weil jeder Thread seinen eigenen Stapelspeicher hat.

Verwandte Themen