Seite 1 von 1
[C++] Function local static
Verfasst: 04.02.2014, 11:15
von Artificial Mind
Hallo!
Eine kurze Frage:
Code: Alles auswählen
foo()
{
static int* p = bar();
assert(nullptr != p);
}
Compiler: MSVC 2013
Angenommen,
bar() kann nie nullptr zurückgeben.
Nun wird
foo() zum ersten Mal von vielen Threads gleichezeitig aufgerufen.
Kann es sein, dass die Assertion fliegt? Weil z. B. einer der Threads innerhalb von
bar() ist und ein anderer dann irgendwie mit p == nullptr rechnet?
Cheers,
Mind
Re: [C++] Function local static
Verfasst: 04.02.2014, 11:52
von CodingCat
Ja, C++11-konforme thread-sichere Initialisierung statischer lokaler Variablen setzt VC++ erst ab dem
November 2013 Community Tech Preview um, das offiziell noch nicht für den Produktiveinsatz gedacht ist. Also nicht vor 2014/2015, bis dahin fliegt die Assertion ganz sicher irgendwann mal.
Re: [C++] Function local static
Verfasst: 04.02.2014, 15:23
von Artificial Mind
Gibt es eine schöne, einfache Lösung um das bis dahin zu simulieren?
Re: [C++] Function local static
Verfasst: 04.02.2014, 16:33
von Spiele Programmierer
Naja, kommt darauf an, wie du "schön" auslegst.
Man könnte einfach eine normale globale Variable außerhalb der Funktion definieren und mit einem Mutex sicherheitssperren.
Re: [C++] Function local static
Verfasst: 04.02.2014, 16:44
von Artificial Mind
In dem Fall wird per Makro die statische Variable angelegt und soll einmal initialisiert werden, allerdings erst wenn schon Teile vom Programm gestartet sind. Dafür haben sich halt die lokalen statischen Variablen prima angeboten.
Re: [C++] Function local static
Verfasst: 04.02.2014, 17:15
von dot
Könntest du einfach das November CTP verwenden oder ist das für dich ein No-go?
Re: [C++] Function local static
Verfasst: 04.02.2014, 17:28
von Artificial Mind
CodingCat hat geschrieben:das offiziell noch nicht für den Produktiveinsatz gedacht ist. Also nicht vor 2014/2015, bis dahin fliegt die Assertion ganz sicher irgendwann mal.
Ich bin mir nicht sicher wie sehr ich mit instabilem MSVC arbeiten möchte.
EDIT: Aber ich denke wir testen das einfach mal.
Re: [C++] Function local static
Verfasst: 04.02.2014, 17:38
von dot
Also wenn du in irgendeiner Firma an Produktivcode arbeitest oder so, ist es natürlich nicht zu empfehlen, aber ich persönlich verwend immer die allerletzte Version von MSVC und hatte damit eigentlich noch nie Probleme...
Re: [C++] Function local static
Verfasst: 04.02.2014, 17:54
von Artificial Mind
Nunja, dieser Bug/Feature ist der Nr. 1 Absturzgrund in den ersten 10 Sekunden nach Start unserer Upvoid Engine ;)
Re: [C++] Function local static
Verfasst: 04.02.2014, 20:04
von CodingCat
Artificial Mind hat geschrieben:CodingCat hat geschrieben:das offiziell noch nicht für den Produktiveinsatz gedacht ist. Also nicht vor 2014/2015, bis dahin fliegt die Assertion ganz sicher irgendwann mal.
Ich bin mir nicht sicher wie sehr ich mit instabilem MSVC arbeiten möchte.
EDIT: Aber ich denke wir testen das einfach mal.
Ich wollte nicht andeuten, dass dieses Feature im CTP nicht funktioniert, vielmehr, dass es bei Source-Code-Kunden ohne installiertes CTP noch ein bis zwei Jahre nicht gesichert vorausgesetzt werden kann.
Re: [C++] Function local static
Verfasst: 04.02.2014, 20:46
von Artificial Mind
Ah gut, ja, dann werden wir wohl einfach upgraden.