Compiler instructions to sync core caches: are they really needed?
This is very simple actually, and has nothing to do with hardware whatsoever. If you have a variable

static bool b;


and some code

b = true;
dosomething();
b = false;
dosomethingelse();
b = true;


If the compiler can figure out that dosomething() and dosomethingelse() don't read or write b, then the compiler is not required to generate code for the assignments to b, except the last one. 

With the book's subtitle "Write robust, concurrent, and parallel applications" this is quite worrying.