Messages in this thread | | | Date | Mon, 3 Mar 2008 18:24:10 +0100 | From | Pavel Machek <> | Subject | Re: [patch] Re: using long instead of atomic_t when only set/read is required |
| |
Hi!
> > Ok, so linux actually atomicity of long? ^~-- assumes should be here.
> No it doesn't. And even if it did you couldn't use long for this because > atomic_t also ensures the points operations complete are defined. You > might just about get away with volatile long * objects on x86 for simple > assignments but for anything else gcc can and will generate code to > update values whichever way it feels best - which includes turning > > long *x = a + b; > > into > > *x = a; > *x += b;
Ok, I can understand the gcc side. But do we actually run on an architecture where
long *x;
*x = 0;
racing with
*x = 0x12345678;
can produce
*x == 0x12340000;
or something like that? I'm told RCU relies on architectures not doing this, and I'd like to get this clarified. Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
| |