Messages in this thread | | | From | "David Schwartz" <> | Subject | RE: [patch] spinlocks: remove 'volatile' | Date | Thu, 6 Jul 2006 16:19:00 -0700 |
| |
> Look at: > > http://en.wikipedia.org/wiki/Volatile_variable > > This is just what is needed to prevent the compiler from making > non working > code during optimization.
That article is totally and completely wrong, in fact it's so wrong it's harmful. For example, it says:
... [A] variable that might be concurrently modified by multiple threads (without locks or a similar form of mutual exclusion) should be declared volatile.
Without pointing out that the use of 'volatile' is neither required nor sufficient, this is an utterly false statement. The reference to "mutual exclusion" is puzzling, since the problem is cached data, not concurrent accesses.
It talks about controlling compiler optimizations. What difference does it make to me whether an optimization that breaks my code is made by the compiler or the processor?
The most serious problem with the article is that it does not point out what is guaranteed behavior and what happens to be true for some particular platforms. In fact, the only platform I know of where the behavior the article implies is guaranteed is (at least arguably) actually guaranteed is Win32. (And I'm not sure of what value a guarantee is that you have to argue is implied mostly by omission.)
Sadly, it omits any mention of the *actual* legitimate use of 'volatile'. That is, the cases where it has guaranteed semantics and actually is both necessary and sufficient.
DS
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |