2016-09-12 2 views
-1

Ich war auf der Suche nach Threadsafe eindeutige ID-Generation in C++ Anwendungsdauer, also habe ich folgende statische Klasse erstellt.thread safe eindeutige ID-Generation in C++

class Utils { 
public : 
    static int getUid(); 
}; 

int Utils::getUid() { 
    static std::atomic<std::uint32_t> uid; 
    uid = 0; 
    return ++uid; 
} 

Irgendein Vorschlag, ist das richtige Ansatz.

+0

Sie haben vielleicht bemerkt es nur '1' zurückkehrt. – LogicStuff

+0

Noch nicht getestet, wird mit einigen Beispielcode überprüft. Jeder andere Ansatz, um etwas zu erledigen. – Sachin

+0

Sie setzen 'uid = 0' bei jedem Anruf zurück, das ist alles. – user4407569

Antwort

1

reparieren es so aus:

class Utils { 
public : 
    static int getUid(); 
}; 

int Utils::getUid() { 
    static std::atomic<std::uint32_t> uid { 0 }; // <<== initialised 
// uid = 0; <<== removed 
    return ++uid; 
} 
+0

Danke. Das funktioniert. aber müssen wir die statische Variable wirklich initialisieren? – Sachin

+0

@Sachin ja, wir tun. Nur so kann es threadsicher bewertet werden. Wenn Sie es wünschen, können Sie es mit einer Funktion initialisieren, aber es muss als eine Initialisierung, nicht als eine nachfolgende Operation erfolgen. –

+0

Danke. Verstanden. – Sachin