Well, based on the text, I think there was a mistake...

>>  Alternatively, it might be better to use more elaborate code to
>>  create rhs outside of the lock, as in the following example. Then,
>>  you can use an interlocked compare exchange to update x only if it
>>  is still null. This assumes that creation of duplicate rhs values
>>  does not cause negative side effects.
>>
>>  if (x == null)
>>  {
>>     lock (this)
>>     {
>>        if (x == null)
>>        {
>>           // Perform some elaborate code to create rhs.
>>           x = rhs;
>>        }
>>     }
>>  }

However, it does make sense with a slight alteration -- and one that
would be almost unnoticed due to positional similarities:

>>  if (x == null)
>>  {

                //Perform the rhs calculations here.

>>     lock (this)
>>     {
>>        if (x == null)
>>        {
>>           x = rhs;
>>        }
>>     }
>>  }

In other words, after the first x == null check, not the second.

You can read messages from the DOTNET archive, unsubscribe from DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.

Reply via email to