D equivalent of C++11's function local static initialization?
bauss via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed May 17 00:08:07 PDT 2017
On Wednesday, 17 May 2017 at 03:08:39 UTC, Timothee Cour wrote:
> NOTE: curious about both cases:
> * thread local
> * shared
>
> On Tue, May 16, 2017 at 8:04 PM, Timothee Cour
> <thelastmammoth at gmail.com> wrote:
>> what's the best D equivalent of C++11's function local static
>> initialization?
>> ```
>> void fun(){
>> static auto a=[](){
>> //some code
>> return some_var;
>> }
>> }
>> ```
>>
>> (C++11 guarantees thread safety)
I don't know the exact equivalent, mostly because I don't really
know what the C++ statement does tbh. Tried to look it up real
quick, but can't seem to find anything actual information on it.
However I can answer about thread local and shared.
Every global is per standard thread local in D.
For example:
int foo;
void fun() {
foo++;
writeln(foo);
}
void main() {
spawn(&fun);
spawn(&fun);
}
In D the output is:
1
1
However in other languages that doesn't have thread-local per
standard the output may vary depending on race-conditions.
So it could be:
1
1
Or:
1
2
Then there's shared.
Shared is kind of a bottle-neck to use and if you're going to use
it you should write all your code as shared and synchronized from
the beginning else you'll just end up ripping your hair out.
shared variables are required to be used in synchronized
contexts, that's about it. It sounds simple, but implementing it
properly is not that easy and tends to just be a bothersome in
exchange for other safe implementation
On the contrary to shared, there's __gshared which is basically
the equivalent to plain old globals in C.
More information about the Digitalmars-d-learn
mailing list