编程语言
首页 > 编程语言> > c# – Interlocked.Increment溢出是否会导致.NET运行时损坏?

c# – Interlocked.Increment溢出是否会导致.NET运行时损坏?

作者:互联网

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改变位置字段旁边的内存位置,那么这可能不会导致.NET运行时损坏,因为这个相邻的位置可能是任何东西(对象引用,类元数据等)?

解决方法:

它只是意味着如果你想要递增的值已经等于Int32.MaxValue并且你递增1而不是抛出错误,它将返回Int32.MinValue

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

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

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

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

标签:c,net,overflow,interlocked
来源: https://codeday.me/bug/20190519/1135628.html