2016-07-08 27 views
0

Ich habe einige C-Code (auf Linux), die in einer thread-sicheren Weise ausgeführt werden muss. Es ist sehr wenig Streit, aber ich muss es bewachen, um die Richtigkeit zu gewährleisten.Wie teuer ist eine niedrige Konkurrenz Mutex in Bezug auf CPU

Ich habe die Möglichkeit, lokale Variablen zu verwenden, um es zu schützen (was funktioniert, basierend auf wie der Code geschrieben wird), aber da ich eine Mutex-Variable habe, was ist der bessere Ansatz in Bezug auf CPU-Nutzung?

Wie ich erwarte, fast nie zu haben, Streit auf dem Schloss ist Mudex Erwerb und Freigabe deutlich teurer im Vergleich zu prüfen, inkrementieren und dekrementieren eine lokale Variable?

Ich benutze den Mutex woanders, also speichere ich keinen Speicher.

+1

Welche Plattform? Unter Linux mit Mutex, das über futex implementiert wird, gibt es keinen Kontextwechsel, wenn Mutex nicht konkurriert. –

+0

Platform is linux –

+3

"Ich habe die Möglichkeit, lokale Variablen zu verwenden, um sie zu schützen) "- das klingt extrem unwahrscheinlich. – user2357112

Antwort

4

Wenn dieselben Daten gleichzeitig mit dem Zugriff von einem anderen Thread geändert werden, haben Sie nur zwei Optionen: Sperren oder Verwenden eines atomaren Datentyps. Es gibt keine "lokalen Variablen, um sie zu schützen". Von den zwei Optionen, die Sie haben, Locking und Atomics, ist der Hauptteil der Laufzeitkosten die Synchronisierung des Speichers (Cache) mit anderen Kernen, und sie sollte in etwa dieselbe für beide sein. Dies ist eine nicht-triviale Kosten (am wahrscheinlichsten in der Größenordnung von zehn Zyklen), aber es ist nicht eine, aus der Sie sich abmelden können; es gibt keine Möglichkeit, ohne sie Korrektheit zu erhalten.