コードインスペクション: 疑わしい「volatile」フィールドの使用:複合操作はアトミックではありません。 代わりに「Interlocked」クラスを使用できます。
このインスペクションは、 volatile フィールドに適用された複合代入およびインクリメント / デクリメント操作を報告します。 フィールドを volatile として宣言しても、 +=、 ++、 -- や ??= のような操作がアトミックになるわけではありません。 これらの操作は依然として複数のステップを実行するため、複数のスレッドからアクセスされると競合状態になる可能性があります。
サンプル
class Counter
{
private volatile int myValue;
void Increment()
{
myValue++;
}
}
using System.Threading;
class Counter
{
private int myValue;
void Increment()
{
Interlocked.Increment(ref myValue);
}
}
2026 年 6 月 12 日