我試圖在C#中的AtomicReference類,我想保持田間參考保護,但我還需要在GET方法返回值:C#如何保護原子類的字段?
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之外進行變異,那麼它會破壞創建這個類的整個目的......是否有辦法實現這個目標?
爲什麼會有java標籤? – SLaks
我剛拿出java標籤 – Suppressingfire
這個java標籤的意思是我想獲得與Java的AtomicReference類似的功能。 – Kiril