On Tue, Jul 08, 2014 at 08:31:17AM -0700, Paul E. McKenney wrote: > Good point, how about the following? > > General barriers pair with each other, though they also pair > with most other types of barriers, albeit without transitivity.
> An acquire barrier pairs with a release barrier, but both may also > pair with other barriers, including of course general barriers. > A write barrier pairs with a data dependency barrier, an acquire > barrier, a release barrier, a read barrier, or a general barrier. > Similarly a read barrier or a data dependency barrier pairs > with a write barrier, an acquire barrier, a release barrier, > or a general barrier: It might be clearer with the added whitespace, or as an explicit list I suppose, but yes. > > Also, it might be good to have a section on the ramifications of pairing > > acquire/release with other than themselves, I have the feeling there's > > subtle things there. > > It can get quite subtle. For the time being, I am dodging this subtlety > by saying that only general barriers provide transitivity (see the > "TRANSITIVITY" section). Ah, I was more thinking of the fact that ACQUIRE/RELEASE are semi-permeable while READ/WRITE are memop dependent. So any combination will be a semi-permeable memop dependent thing, which is the most narrow barrier possible. So if we thing of ACQUIRE/RELEASE as being 'half' a full barrier, separated in direction, and READ/WRITE as being 'half' a full barrier separated on type, then the combination is a 'quarter' barrier. Not arguing they're not useful, just saying we need to be extra careful. > Maybe some day we should capture this subtlety in memory-barriers.txt, > but we will first need a new generation of small children who are not > scared by the current document. ;-) Lolz :-)
pgpsnl5zdfPiG.pgp
Description: PGP signature

