[
https://issues.apache.org/jira/browse/HADOOP-12593?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15024979#comment-15024979
]
Sangjin Lee commented on HADOOP-12593:
--------------------------------------
Non-volatile assignments of longs and doubles *may* lead to seeing half-writes
(i.e. completely different value) unlike ints (where you see either the old
value or the new value but never any other value). But volatile longs and
doubles are always atomic per Java Memory Model.
I agree that volatiles and compound operators (++, +=, etc.) don't mix as
volatiles are for giving you visibility for single assignments. That is true
for any types (int, long, double, short, etc.).
> multiple "volatile long" field declarations exist in the Hadoop codebase
> ------------------------------------------------------------------------
>
> Key: HADOOP-12593
> URL: https://issues.apache.org/jira/browse/HADOOP-12593
> Project: Hadoop Common
> Issue Type: Bug
> Affects Versions: 2.8.0
> Reporter: Steve Loughran
> Priority: Minor
>
> If you get your IDE to scan for "volatile long", you find 20-30 entries.
> Volatile operations on `long` variables are not guaranteed to be atomic, so
> these usages can be vulnerable to race conditions generating invalid data.
> they need to be replaced by AtomicLong references, except in the specific
> case that you want performance values for statistics, and are prepared to
> take the risk
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)