volatile ограничивает некоторые переупорядочивания и кэширование доступа к полю в модели памяти .NET.
Разбор
- Не замена lock для сложных инвариантов.
- Interlocked часто яснее.
- Для многопольных структур данных нужны полноценные примитивы.
- Используйте точечно.
Итог
volatile — узкий инструмент видимости, не универсальная синхронизация.