How to use globals correctly?

bauss jj_1337 at live.dk
Tue Mar 6 18:34:34 UTC 2018


On Monday, 5 March 2018 at 19:51:33 UTC, Steven Schveighoffer 
wrote:
> On 3/5/18 2:25 PM, Marc wrote:
>> 
>> Can __gshared be used instead of static in the singleton 
>> pattern? I, comming from C++, ignorantly, have never used 
>> _gshared so I went to static instead of (being static also 
>> means thread-safe, as far I know)...
>
> static in D is thread safe, because it's thread-local. 
> __gshared is shared between threads, so it's not thread safe, 
> but has the exact same type as just static data.
>
> Can you use it for singleton? Sure, classic singleton is shared 
> between threads. But using thread-local data, you can solve the 
> singleton problem in a better way:
>
> https://wiki.dlang.org/Low-Lock_Singleton_Pattern
>
> Note, it still uses __gshared, which means it doesn't protect 
> you from race conditions when you actually USE the singleton 
> object. This means you need some synchronization inside the 
> methods.
>
> -Steve

Singletons are always smelly code tbh.

Especially in D with thread-local storage.

I can't think of a situation where you truly need singletons in D.


More information about the Digitalmars-d-learn mailing list