[infinispan-dev] [ISPN-116] Async cache store: aggregation of multiple changes on a single key
Manik Surtani
manik at jboss.org
Thu Jul 9 05:55:05 EDT 2009
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 at jboss.org
Lead, Infinispan
Lead, JBoss Cache
http://www.infinispan.org
http://www.jbosscache.org
More information about the infinispan-dev
mailing list