Async-signal-safe access to __thread variables from dlopen()ed libraries?
Torvald Riegel
triegel@redhat.com
Sun Oct 6 21:56:00 GMT 2013
On Sun, 2013-10-06 at 17:40 -0400, Rich Felker wrote:
> On Sun, Oct 06, 2013 at 11:36:41PM +0200, Torvald Riegel wrote:
> > > My point is that char seems to automatically have this property on any
> > > sane hardware, because, per the the POSIX and C11 memory models, you
> > > can't access char objects as a read-modify-write sequence on a larger
> > > unit of storage; you must perform single-byte accesses.
> >
> > The compiler could still do "arbitrary" stuff to non-atomic and
> > non-volatile char variables (reordering accesses, ...), provided that
> > when assuming a sequential program, the program would behave as if the
> > abstract machine would execute it. The atomics tell the compiler to not
> > assume that this is sequential code; therefore, a char-typed variable
> > doesn't have the stronger properties automatically.
>
> Adding volatile (which, BTW, also needs to be added to sig_atomic_t)
> would avoid these ordering issues.
It would prevent some of them -- but then we're talking not about plain
char-typed variables anymore. Also, volatiles and atomics aren't the
same thing;
> > On the C11 and C++11 models, I think a compiler could also use
> > multi-byte accesses with atomic read-modify-write ops as long as it
> > makes sure that those don't overlap with volatiles or similar.
>
> Is that observably different from a single-byte write? I don't think
> so.
That's the point: The compiler must not necessarily use single-byte
accesses, as you seemed to say (see above).
More information about the Libc-alpha
mailing list