Hello Bart,
Thanks for the summary. There are good pointers in this e-mail thread
regarding the current state of the process of defining memory model
for C++ (and eventually for C I guess).
>From those pointers several conclusions may be made (which are in line
with that you said):
- though neither Standard C nor POSIX require to use volatile, it
seems like you have to use it until the memory model is clearly
defined.
- the compiler should not introduce speculative stores to the shared
objects. This is what my original question was about. I haven't
read all the papers yet, so one thing is still unclear to me: it
seems like atomic variables will be annotated as such
(atomic<int>). But I found no proposal for annotation of
non-atomic objects that are protected by the ordinary locks (like
mutexes). Will the compiler be forbiden to do all speculative
stores, or how will it recognize shared objects as such?
- the compiler should not cross object boundary when doing the store
(i.e. when storing to 8-bit char it should not store to the whole
32/64-bit word). Here's the same question about shared object
annotation.
Cheers,
--
Tomash Brechko