Interlocked.Increment溢出会导致.NET运行时损坏吗?

时间:2016-02-22 16:29:48

标签: c# .net overflow interlocked

Interlocked.Increment州的MSDN文档:

  

此方法通过换行来处理溢出条件:if location = Int32.MaxValue, location + 1 = Int32.MinValue。没有例外。

location + 1”在这种情况下意味着什么?如果Increment改变了 location 字段旁边的内存位置,那么这可能会导致.NET运行时损坏,因为这个相邻的位置可能是任何东西(对象)引用,类元数据等)?

1 个答案:

答案 0 :(得分:6)

这只是意味着如果你想增加的值已经等于Int32.MaxValue而你增加1而不是抛出错误,它会返回Int32.MinValue

如果你这样做会发生同样的事情

var value = Int32.MaxValue;
value += 1;

如果您明确要求抛出异常,请使用checked关键字

var value = Int32.MaxValue;
value = checked(value + 1);