Interlocked.Increment 溢出会导致 .NET 运行时损坏吗?
Can Interlocked.Increment overflow cause .NET runtime corruption?
Interlocked.Increment
的 MSDN 文档指出:
This method handles an overflow condition by wrapping: if location = Int32.MaxValue, location + 1 = Int32.MinValue. No exception is thrown.
“位置 + 1”在这种情况下是什么意思?如果 Increment
更改 location 字段旁边的内存位置,这是否可能导致 .NET 运行时损坏,因为这个相邻位置可能是任何东西(对象引用、class 元数据等)?
这只是意味着如果你想要增加的值已经等于Int32.MaxValue
并且你增加一个,而不是抛出错误,它returns Int32.MinValue
如果你这样做
也会发生同样的情况
var value = Int32.MaxValue;
value += 1;
如果您明确希望抛出异常,请使用 checked
关键字
var value = Int32.MaxValue;
value = checked(value + 1);
Interlocked.Increment
的 MSDN 文档指出:
This method handles an overflow condition by wrapping: if location = Int32.MaxValue, location + 1 = Int32.MinValue. No exception is thrown.
“位置 + 1”在这种情况下是什么意思?如果 Increment
更改 location 字段旁边的内存位置,这是否可能导致 .NET 运行时损坏,因为这个相邻位置可能是任何东西(对象引用、class 元数据等)?
这只是意味着如果你想要增加的值已经等于Int32.MaxValue
并且你增加一个,而不是抛出错误,它returns Int32.MinValue
如果你这样做
也会发生同样的情况var value = Int32.MaxValue;
value += 1;
如果您明确希望抛出异常,请使用 checked
关键字
var value = Int32.MaxValue;
value = checked(value + 1);