: @Groo reordering instructions ( CLR), . , lock , , reordering instructions. this, , "Monitor.Enter Monitor.Exit ".
; :
private bool _HasHashCode = false;
private int _HashCode;
private readonly object _lock = new object();
public override int GetHashCode()
{
if (_HasHashCode)
return _HashCode;
lock (_lock)
{
if (_HasHashCode)
return _HashCode;
long hashCode;
unchecked
{
hashCode = Digits;
hashCode = (hashCode*397) ^ XI;
hashCode = (hashCode*397) ^ YI;
hashCode = (int) (hashCode%Int32.MaxValue);
}
_HashCode = (int) hashCode;
_HasHashCode = true;
return _HashCode;
}
}
/ , , - " ?". . lock , ( - !). . , ( ), _HasHashCode true .
, , ; ! lock ( ).
: . : , ?:)