ПРИМЕЧАНИЕ. Я действительно не очень хорошо разбираюсь в многопоточном программировании, но в моем текущем проекте мне это делается, поэтому я пытаюсь понять, что является потокобезопасным, а что нет.
Я читал один из Eric Lippert удивительных ответов на то, что ++ я делаю. Он говорит, что это действительно так:
- x вычисляется для создания переменной
- значение переменной копируется во временное расположение
- временное значение увеличивается, чтобы создать новое значение (не перезаписывая временное!)
- новое значение сохраняется в переменной
- результатом операции является новое значение
Это заставило меня подумать, что, если два потока, где вызывается ++ i? Если первый поток находится на шаге 3, когда второй поток находится на шаге 2. (Что означает, что если второй поток копирует значение в временное местоположение до того, как первый поток сохранит новое значение в переменной?)
Если это произойдет, тогда казалось бы, что оба потока будут только увеличивать i
один раз вместо двух. (Если все это не в lock
.)