Iterating over thread local storage variables

Anonymouse via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Mar 11 10:45:13 PST 2016


On Friday, 11 March 2016 at 17:33:43 UTC, sigod wrote:
> On Friday, 11 March 2016 at 17:03:38 UTC, Anonymouse wrote:
>> On Friday, 11 March 2016 at 15:21:38 UTC, maik klein wrote:
>>>     static Singleton!T get()
>>>     {
>>>         if (!instantiated_)
>>>             {
>>>             synchronized(Singleton!T.classinfo){
>>>                 if (!instance_){
>>>                     instance_ = new Singleton!T();
>>>                 }
>>>                 instantiated_ = true;
>>>                 instance_.tls.insertBack(&instance_.value);
>>
>> As a drive-by comment, mind that there is a race there. 
>> _instantiated may have been set after the if statement but 
>> before the synchronized block. You have to test it again 
>> inside.
>
> That's why inside of `synchronized` block you can see `if 
> (!instance_)`.

It does, yes, but it also calls instance_.tls.insertBack 
unconditionally. To illustrate: 
http://dpaste.dzfl.pl/8f3e78f3265a7

Apologies for derailing.


More information about the Digitalmars-d-learn mailing list