On 8 Jul 2009, at 19:53, Jason T. Greene wrote:
Manik Surtani wrote:
> * Make the concurrent map volatile
> * When iterating, first create a new ConcurrentMap and replace the
> old one with the new one so all concurrent threads write to the new
> Map
> * Iterate over the old map
That would lead to race conditions since a concurrent writing thread
could write to the "old" map, either by getting a recent yet
incorrect read off the volatile, or reading it right before it
changes.
True, since referencing the map and writing to it isn't atomic.
We could guard access to the map with a read/write lock. Safe, if a
little heavy-handed... map writers would acquire a RL (since we want
concurrent access here) but the async flushing thread would need to
wait for a WL to swap the map reference, releasing the lock after the
map reference has been swapped.
--
Manik Surtani
manik(a)jboss.org
Lead, Infinispan
Lead, JBoss Cache
http://www.infinispan.org
http://www.jbosscache.org