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 외부에서 변형되도록 허용하면이 클래스를 만드는 데 필요한 모든 목적을 달성 할 수 없게됩니다.이를 달성 할 수있는 방법이 있습니까?
왜 자바 태그가 있습니까? – SLaks
방금 Java 태그를 꺼 냈습니다 – Suppressingfire
Java 태그는 Java의 AtomicReference와 비슷한 기능을 원합니다. – Kiril