注意:我真的不是很擅长多线程编程,但我目前的项目让我这样做,所以我试图了解线程安全和什么不是.
我正在阅读Eric Lippert 关于++我所做的那些令人敬畏的答案之一.他说这才是真正发生的事情:
- 评估x以生成变量
- 将变量的值复制到临时位置
- 临时值递增以产生新值(不覆盖临时值!)
- 新值存储在变量中
- 操作的结果是新值
这让我思考,如果调用++ i的两个线程怎么办?如果第一个线程在步骤3,当第二个线程在步骤2时.(这意味着如果第二个线程在第一个线程将新值存储在变量中之前将值复制到临时位置,该怎么办?)
如果发生这种情况,那么两个线程似乎只会增加i一次而不是两次.(除非整件事情都在lock.)