On 14.07.2010 18:26, Dennis Ferguson wrote: > > On 14 Jul 2010, at 07:50 , Christos Zoulas wrote: > >>> I have a route lookup data structure which is fairly speedy and >>> which is designed to be modified (i.e. routes added or deleted) >>> while lookups are concurrently being done. This is part of a >>> project to produce a fully SMP-capable networking stack. > [...] >> Would RCU be helpful in your scenario? > > I didn't know there was a name for that but, yes, that's how it > works. When something is removed from the structure the memory > allocator needs to hang on to the now-detached memory and keep > it unchanged until it can prove that all lookups which might have > started before the change have finished. The (only) thing which > requires the memory barriers is that when you add something to the > structure you first initialize the new memory to the state it > needs to be in when it is added, and then modify pointers in the > existing structure to point at the new memory. The initialization > done needs to be visible to all processors before the changes to > the pointers become visible. > > The wikipedia article on RCU, here > > http://en.wikipedia.org/wiki/Read-copy-update > > in section 3 actually mentions the problem with the Alpha which > requires the read memory barriers for that processor only.
IIRC, you cannot implement RCU in non GPL software (unless IBM gives approval for it). -- Jean-Yves Migeon [email protected]
