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.