[C++] Function local static

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

[C++] Function local static

Beitrag 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
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: [C++] Function local static

Beitrag 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.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: [C++] Function local static

Beitrag von Artificial Mind »

Gibt es eine schöne, einfache Lösung um das bis dahin zu simulieren?
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: [C++] Function local static

Beitrag 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.
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: [C++] Function local static

Beitrag 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.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: [C++] Function local static

Beitrag von dot »

Könntest du einfach das November CTP verwenden oder ist das für dich ein No-go?
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: [C++] Function local static

Beitrag 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.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: [C++] Function local static

Beitrag 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...
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: [C++] Function local static

Beitrag von Artificial Mind »

Nunja, dieser Bug/Feature ist der Nr. 1 Absturzgrund in den ersten 10 Sekunden nach Start unserer Upvoid Engine ;)
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: [C++] Function local static

Beitrag 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.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: [C++] Function local static

Beitrag von Artificial Mind »

Ah gut, ja, dann werden wir wohl einfach upgraden.
Antworten