C#中的++运算是原子的吗?

smw*_*dia 5 .net c#

我有多个线程使用"++"或" - "操作访问单个Int32变量.

我们是否需要在访问之前锁定,如下所示?

    lock (idleAgentsLock)
    {
       idleAgents--;  //we should place it here.
    }
Run Code Online (Sandbox Code Playgroud)

或者如果我不进行锁定会有什么后果?

kpr*_*bst 6

它不是"原子的",不是多线程意义上的.但是,理论上至少你的锁可以保护操作.如有疑问,您当然可以使用Interlocked.Decrement.


jrb*_*rly 5

No ++/ - 不是原子操作,但读取和写入整数和其他原始时间被认为是原子操作.

看到这些链接:

博客文章对您也有一些兴趣.

我建议Interlocked.Increment联锁类原子实现++/-运算符.