On Thu, 27 Jan 2005, Paul Jackson wrote: > > A long time ago, Linus wrote: > > An atomic op is pretty much as expensive as a spinlock/unlock pair on x86. > > Not _quite_, but it's pretty close. > > Are both read and modify atomic ops relatively expensive on some CPUs, > or is it just modify atomic ops?
Linux pretty much assumes that any naturally aligned read or write of the basic word-size (actually "int"/"long"/pointer) are always atomic. That's true on all architectures that do SMP today. In fact, it's hard seeing it ever be not true, although specialized architectures with out-of-band locking bits might have different assumptions (and return "invalid" for a memory location that is "in flux"). So if you just do a regular read or write, that's basically always cheap. HOWEVER. In the absense of locking, you usually can't just do a regular read or write. You'd have memory barriers etc, which quite easily bring the cost up to similar as locking (modulo cacheline bounces, which would happen on the actual access, not the barrier). Also, "bigger" accesses are not atomic, ie a 64-bit read on a 32-bit platform usually requires a lock (or equivalent data structures, like sequence numbers with memory barriers). The _real_ cost of not locking also often ends up being the inevitable bugs. Doing clever things with memory barriers is almost always a bug waiting to happen. It's just _really_ hard to wrap your head around all the things that can happen on ten different architectures with different memory ordering, and a single missing barrier. Linus - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/