示例#1
0
            protected override bool SetValue(TValue value, bool replace)
            {
                var success = false;

                if (replace)
                {
                    while (!success)
                    {
                        var v = _value;
                        success = v == Interlocked.CompareExchange(ref _value, ValueBox.Create(value), v);
                    }
                    return(true);
                }
                var set = false;

                while (success)
                {
                    var v = _value;
                    if (null != v)
                    {
                        success = true;
                        set     = false;
                    }
                    else
                    {
                        success = v == Interlocked.CompareExchange(ref _value, ValueBox.Create(value), v);
                        set     = success;
                    }
                }
                return(set);
            }
示例#2
0
            protected override bool InitValue(TArg arg, out TValue value)
            {
                var v = Initializer(arg);

                _value = ValueBox.Create(v);
                value  = v;
                return(true);
            }
示例#3
0
 protected override bool SetValue(TValue value, bool replace)
 {
     if (replace || null == _value)
     {
         _value = ValueBox.Create(value);
         return(true);
     }
     return(false);
 }
示例#4
0
 public static bool TryGetValue <T>(this ValueBox <T> valueBox, out T value)
 {
     if (null == valueBox)
     {
         value = default(T);
         return(false);
     }
     value = valueBox.Value;
     return(true);
 }
示例#5
0
 protected override bool SetValue(TValue value, bool replace)
 {
     return(_lock.Synchronized(() => {
         if (replace || null == _value)
         {
             _value = ValueBox.Create(value);
             return true;
         }
         return false;
     }));
 }
示例#6
0
            protected override bool ResetValue()
            {
                ValueBox <TValue> value = null;
                var success             = false;

                while (!success)
                {
                    value = _value;
                    Interlocked.MemoryBarrier();
                    success = value == Interlocked.CompareExchange(ref _value, null, value);
                }
                return(null == value);
            }
示例#7
0
            protected override bool InitValue(TArg arg, out TValue value)
            {
                var newValue = ValueBox.Create(Initializer(arg));

                Interlocked.MemoryBarrier();
                if (null == Interlocked.CompareExchange(ref _value, newValue, null))
                {
                    value = newValue.Value;
                    return(true);
                }
                value = _value.Value;
                return(false);
            }
示例#8
0
 protected override bool InitValue(TArg arg, out TValue value)
 {
     _lock.Lock();
     try
     {
         if (null != _value)
         {
             value = _value.Value;
             return(false);
         }
         var v = Initializer(arg);
         _value = ValueBox.Create(v);
         value  = v;
         return(true);
     }
     finally
     {
         _lock.Release();
     }
 }