Garrett D'Amore wrote:
> Peter Cudhea wrote:
> > It would be useful to take a definitive stand on whether or not
> > operations on two adjacent bool values are atomic with respect to one
> > another.  E.g. back in the days of the DEC Alpha, there existed no
> > instructions that could modify the value of one bool in a word without
> > potentially interfering in other uses of a differnt bool in the same
> > word.   That consideration does not apply to either of the current
> > Solaris platforms.   But are we introducing a constraint that Solaris
> > could never be ported to such a platform?   Or are we introducing a
> > constraint that any values that should be updatable atomically should
> > be stored in a boolean_t and not in a bool?   Or does the compiler
> > guarantee to allocate bools on word boundaries in platforms such as
> > this?   Either way, we should spell it out.
> 
> I would suggest that in situations where this matters, there are a
> couple of options:
> 
> 1) use locking primitives to guard an associated group of booleans.
> 2) find out what C99 says about this (if anything)
> 3) if you're really that concerned, such as in kernel space, use boolean_t.
> 
> I raised some of these concerns in private review with Roland before
> submitting the case.   Personally, I have reservations about using C99
> bool in places where atomicity is a requirement,

What about adding an |atomic_swap_bool()| (e.g. an alias for
|atomic_swap_uchar()|) to <atomic.h> ?

> or in public headers
> where it might force C99, or in structures where strict packing is required.

What do you mean with "strict packaging" in this case ? |bool| will
behave like the platform's smallest datatype (e.g. |char| (one byte on
SPARC+x86)) within a struct and therefore consume a lot less than
|boolean_t| (which may result in less data cache usage since |boolean_t|
is AFAIK an |enum| which consumes the space of an |int| (four bytes on
SPARC+x86)) ...

----

Bye,
Roland

-- 
  __ .  . __
 (o.\ \/ /.o) roland.mainz at nrubsig.org
  \__\/\/__/  MPEG specialist, C&&JAVA&&Sun&&Unix programmer
  /O /==\ O\  TEL +49 641 3992797
 (;O/ \/ \O;)

Reply via email to