Normalerweise, wenn ich thread-sichere Funktionen machen möchte, sperre ich die geteilten Daten und lasse sie dann los, wenn ich mit der Arbeit fertig bin.C: Wie kann diese Funktion threadsicher gemacht werden?
Hier arbeite ich mit einer globalen Variable. Einfaches Sperren und Entsperren stellt nicht sicher, dass die Funktion einen eindeutigen Wert zurückgibt. Wie ändere ich die folgende Funktion als threadsicher und stelle sicher, dass immer eine eindeutige Ganzzahl zurückgegeben wird?
int count = 0;
int GetUnique()
{
count = count + 1;
return count;
}
Einige Leute haben erwähnt, eine lokale statische Variable innerhalb der Funktion zu machen? Wie und warum würde das funktionieren (wenn es wahr ist)?
Die Funktion muss nicht "count" zurückgeben. 'int lokale_anzahl; sperren(); Anzahl = Anzahl + 1; local_count = zählen; Freischalten(); return local_count; '? –
@iharob - Das Sperren/Entsperren ist Overkill, die CPU hat spezifische Anweisungen, um diesen genauen Anwendungsfall ohne jegliche Verriegelung zu handhaben. – Geoffrey
@Geoffrey Ich gehe davon aus, dass dies erforderlich ist, weil es aussieht wie eine Hausaufgabe oder ähnliches. –