[ 
https://issues.apache.org/jira/browse/HAMA-971?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14718610#comment-14718610
 ] 

JongYoon Lim commented on HAMA-971:
-----------------------------------

You're right, Edward. I missed the synchronized block. :) 

But I think that it's better to omit *volatile* keyword because we use 
synchronized block for the variable and *volatile* is normally used in which 
case the Java Memory Model ensures that all threads see a consistent value for 
the variable. What do you think..? 

And *rpcCount* should be declared as AtomicInteger.. right..? 

> An increment to a volatile field isn't atomic
> ---------------------------------------------
>
>                 Key: HAMA-971
>                 URL: https://issues.apache.org/jira/browse/HAMA-971
>             Project: Hama
>          Issue Type: Bug
>          Components: bsp core
>            Reporter: JongYoon Lim
>            Priority: Minor
>
> I found a defect from FindBugs Analysis.
> {code}
> // AsyncRcvdMsgCheckpointImpl.java
> volatile private long checkpointMessageCount;
> ...
> ++checkpointMessageCount;
> {code}
> {code}
> // Server.java
> private volatile int rpcCount = 0; // number of outstanding rpcs
> ...
> rpcCount--;
> rpcCount++;
> {code}
> This code increments a volatile field. Increments of volatile fields aren't 
> atomic. If more than one thread is incrementing the field at the same time, 
> increments could be lost.
> I think *AtomicInteger* and *AtomicLong* can be used instead of volatile 
> fields. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to