On Fri, Jul 18, 2003 at 04:14:23PM +0300, Juhana Sadeharju wrote:
From: Alfons
Adriaensen <fons.adriaensen(a)alcatel.be>
I don't have your original message with the code at hand here, so
this may be a false alarm. Did you think of making all pointers
into shared memory volatile? IIRC you are testing on a counter
that is incremented by another process - such a small memory access
could easily be optimised away.
And that was it!! What braindamaged compiler authors!
In the code
k = -1;
for (;;) {
if (k != nums[1]) {
k = nums[1];
fprintf(stderr,"%i\n",k);
}
fprintf(stderr,"g");
}
The whole if was apperently optimized away. The code printed only one
number and a lot of "g"s. Of the two choises (1) nums[1] is updated
elsewhere, (2) it is unnecessary code, coder just tries to be clever,
the compiler authors selected the latter.
Yes. If a compiler would select [1] by default, most optimizations would
be impossible. So you have to tell it by using 'volatile'.
--
Fons