Florian Weimer writes:
 > * Samuel Tardieu:
 > 
 > > On 27/10, Florian Weimer wrote:
 > >
 > > | (I can't reproduce the conditional store with my GCC 4.2 installation,
 > > | though.)
 > >
 > > You need "-O -fno-inline" to trigger it on this particular example
 > > (you don't need "-fno-inline" if you put "Lock" in a separate package).
 > 
 > Ah, thanks.  I see it now.
 > 
 > If not for Ada, we need to fix it for Java.  The following snippet shows
 > the same problem:
 > 
 > class C {
 >     static volatile boolean flag;
 >     static int shared;
 >     public void maybe_increment() {
 >         if (flag)
 >             ++shared;
 >     }
 > }
 > 
 > _ZN1C15maybe_incrementEJvv:
 > .LFB3:
 >      movzbl  _ZN1C4flagE(%rip), %eax
 >      cmpb    $1, %al
 >      movl    _ZN1C6sharedE(%rip), %eax
 >      sbbl    $-1, %eax
 >      movl    %eax, _ZN1C6sharedE(%rip)
 >      ret
 > 
 > And the 1.5 memory model should really, really prevent that (if not,
 > it's broken).

The Java 1.5 memory model will prevent that.  I'm hoping Ian Taylor's
patch will fix this problem for Java as well as C.

Andrew.

Reply via email to