[concurrency-interest] Using Atomic*FieldUpdater to remove indirection

Ariel Weisberg ariel at weisberg.ws
Wed Feb 13 16:45:42 EST 2013


Hi,



I have two use cases in mind.



I have some COW* data structures that use AtomicReference internally
for example [1]COWNavigableSet. Using AtomicReference means there is an
extra indirection for every lookup.



The other use case is a field that tracks the [2]last time a message
was received from a host. There is a single thread that updates the
field every time a message is delivered and multiple threads read the
field [3]every time they send a message to that host.



In the last message time tracking use case there will always be a
coherence operation for the cache line containing the value tracking
the last message time. I suppose it doesn't really matter if the other
fields in that class are on the same line because the number of
coherence operations remains the same. If there were a get equivalent
of lazySet that would be nice.



Thanks,

Ariel





On Wed, Feb 13, 2013, at 03:51 PM, Vitaly Davidovich wrote:

  Can you elaborate a bit? Do you mean using AtomicInteger (as an
  example) instead of an int field inside a class? If so, I'd
  personally pad out the class with filler fields to avoid false
  sharing - there's no guarantee that the indirection via AtomicXXX
  will put memory far apart; padding gives you a bit more control
  here.

  Sent from my phone

On Feb 13, 2013 3:44 PM, "Ariel Weisberg" <[4]ariel at weisberg.ws> wrote:

  Hi,
  Does it make sense to use Atomic*FieldUpdater to remove the
  indirection
  overhead of an AtomicLong and AtomicReference? Similarly, does it
  make
  sense to use Atomic* to create indirection in order to avoid false
  sharing?
  Thanks,
  Ariel
  _______________________________________________
  Concurrency-interest mailing list
  [5]Concurrency-interest at cs.oswego.edu
  [6]http://cs.oswego.edu/mailman/listinfo/concurrency-interest

References

1. https://github.com/VoltDB/voltdb/blob/master/src/frontend/org/voltcore/utils/COWNavigableSet.java#L30
2. https://github.com/VoltDB/voltdb/blob/cdc1eb42d6d8708cb5371af5cb1fd747372d8be0/src/frontend/org/voltcore/messaging/ForeignHost.java#L300
3. https://github.com/VoltDB/voltdb/blob/cdc1eb42d6d8708cb5371af5cb1fd747372d8be0/src/frontend/org/voltcore/messaging/ForeignHost.java#L213
4. mailto:ariel at weisberg.ws
5. mailto:Concurrency-interest at cs.oswego.edu
6. http://cs.oswego.edu/mailman/listinfo/concurrency-interest
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cs.oswego.edu/pipermail/concurrency-interest/attachments/20130213/9aeb61d6/attachment-0001.html>


More information about the Concurrency-interest mailing list