[cpp-threads] atomic operations package
    Peter Dimov 
    pdimov at mmltd.net
       
    Sun Oct  9 13:24:10 BST 2005
    
    
  
Doug Lea wrote:
[About acquire/release only vs fine grained]
> I think this is fine. I know that neither Peter Dimov nor
> Alexander Terekhov think this suffices to support usages
> they say they need. (Which is the main reason I gave up
> on variants of this.)
>
> Peter and/or Alexander: Could you soon post something
> (re)stating your concerns so we can make a decision about it
> rather than continuing to stall?
I'm slowly gravitating towards the acq/rel model.
One argument in favor of the load only variants was 
pthread_rwlock_rdlock/unlock. It's not clear whether the current POSIX 
memory model permits it, but under the assumption that it does, read locks 
and read unlocks do not need to constrain writes.
But I found an example where the more constrained rwlock (with plain 
acquire/release on read lock/unlock) would be useful, whereas the optimized 
version would actually decrease performance.
Consider a mostly lock-free data structure where most operations (insert, 
delete, find) can proceed in parallel, but some (resize) need exclusive 
lock. It's natural to use a rwlock for that; a rwlock is not about reads or 
writes, it's about shared and exclusive access.
This leaves me with one other use of the fine-grained constraints - 
expressing bidirectional (SPARC RMO-style) barriers. A #loadStore, for 
instance, can be expressed as msync_slb + msync_hsb (prevent sinking of 
loads, hoisting of stores.) The acquire/release model can only express a 
full fence. 
    
    
More information about the cpp-threads
mailing list