Subj : Re: [.NET] Volatile Fields To : comp.programming.threads From : David Hopwood Date : Sat Sep 17 2005 03:21 pm Joe Seigh wrote: > Cool Guy wrote: >> Joe Seigh wrote: >> >>> Cache has no effect on read/write ordering. It's the memory model >>> that does. You could have a system without cache and it would still >>> have the same issues with read/write ordering. So trying to imagine >>> what is happening with a hardware entity, which by definition you can't >>> see, only serves to confuse yourself. >> >> My confusion arises from the fact that only *one* of those fields is >> volatile in the example linked from the OP, and not *both* of them, which >> leads me to believe that the one field that isn't volatile could be >> read/written from/to the cache instead of from/to main memory and thus >> the code isn't thread-safe. > > If that was true then you could detect the presence of cache. But you > can't detect the presence of cache by definition so it must not be > true. You *can* detect the presence of cache (even though it is a transparent optimization). Its presence affects which of the behaviours that are allowed by the nondeterministic memory model can actually occur on a given implementation. This is usually not an issue if you depend only on the memory model. But note that you cannot force other software to depend only on the memory model, and that can have security implications, e.g. . -- David Hopwood .