我正在尝试在 C# 中创建一个 AtomicReference 类,并且我想保护字段引用,但我还需要在 get 方法中返回值:
class AtomicReference
{
private Object _value;
public AtomicReference()
{
_value = new Object();
}
public AtomicReference(Object value)
{
OptimisticSet(value);
}
public Object CompareAndSet(Object newValue)
{
return Interlocked.Exchange(ref _value, newValue);
}
public void OptimisticSet(Object newValue)
{
do {
} while (_value == Interlocked.CompareExchange(ref _value, _value, newValue));
}
public Object Get()
{
// Don't leak the field reference
const Object constVal = _value;
return constVal;
}
}
解决这个问题有点笨拙……我不能将字段设为只读,因为我需要能够设置它。有比我更好的解决方案吗?
更新:感谢您的快速回复!正确地指出,如果我简单地返回 _value,引用将受到保护。我还想保护 _value 免受变异。如果我允许 _value 在 AtomicReference 之外发生变异,那么它就违背了制作这个类的全部目的......有没有办法实现这一点?