Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 2 Oct 1998 13:02:16 +1000
From:      Bruce Evans <bde@zeta.org.au>
To:        cvs-all@FreeBSD.ORG, cvs-committers@FreeBSD.ORG, dillon@backplane.com, guido@gvr.org, jb@FreeBSD.ORG, phk@critter.freebsd.dk
Subject:   Re: cvs commit: src/lib/libc_r/uthread uthread_gc.c Makefile.inc uthread_init.c uthread_find_thread.c uthread_kern.c uthread_create.c uthread_exit.c
Message-ID:  <199810020302.NAA10722@godzilla.zeta.org.au>

next in thread | raw e-mail | index | archive | help
>:    The only thing you can assume as being atomic is a read or write, never
>:    a read-modify-write, because you never know what kind of optimizations
>:    (or lack thereof) the compiler will perform and also because some cpu's
>:    simply do not have a locked RMW capability.
>
>    oops, I meant a 'volatile read or write'.  aka, to guarentee read or write

You meant a `volatile sig_atomic_t read or write'.  Longs can be larger
than the largest memory access size.  Shorts and chars can be smaller than
the smallest memory access size.

>    atomicy is to guarentee read or write ordering, as in the following 
>    example.  Any compiler which reorders the stores in this case 
>    (or the loads in the read case) is broken.
>
>    volatile int a;
>    volatile int b;
>
>    code() {
>	a = 1;
>	b = 2;
>    }

`volatile' is not necessary here in practice, since Standard C requires
stores to act as if they are complete at sequence points, and compilers
attempt to implement Normal C which requires everything to work Normally
in signal handlers.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199810020302.NAA10722>