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