How to use globals correctly?

Steven Schveighoffer schveiguy at yahoo.com
Mon Mar 5 19:51:33 UTC 2018


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


More information about the Digitalmars-d-learn mailing list