public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
[parent not found: <Pine.LNX.4.64.0710281753210.23011@wotan.suse.de.suse.lists.egcs>]
[parent not found: <e2e108260710260634q7a291337s6e66dfa25f28b68a@mail.gmail.com.suse.lists.egcs>]
[parent not found: <e2e108260710260541n61462585u99de9bc0617720f4@mail.gmail.com.suse.lists.egcs>]
[parent not found: <e2e108260710260634q7a291337s6e66dfa25f28b68a@mail.gmail.com>]
[parent not found: <20071022093617.GA5073@moonlight.home.suse.lists.egcs>]
* Optimization of conditional access to globals: thread-unsafe?
@ 2007-10-21 14:55 Tomash Brechko
  2007-10-21 15:26 ` Erik Trulsson
                   ` (2 more replies)
  0 siblings, 3 replies; 206+ messages in thread
From: Tomash Brechko @ 2007-10-21 14:55 UTC (permalink / raw)
  To: gcc

Hello,

I have a question regarding the thread-safeness of a particular GCC
optimization.  I'm sorry if this was already discussed on the list, if
so please provide me with the reference to the previous discussion.

Consider this piece of code:

    extern int v;
  
    void
    f(int set_v)
    {
      if (set_v)
        v = 1;
    }

If f() is called concurrently from several threads, then call to f(1)
should be protected by the mutex.  But do we have to acquire the mutex
for f(0) calls?  I'd say no, why, there's no access to global v in
that case.  But GCC 3.3.4--4.3.0 on i686 with -01 generates the
following:

    f:
            pushl   %ebp
            movl    %esp, %ebp
            cmpl    $0, 8(%ebp)
            movl    $1, %eax
            cmove   v, %eax        ; load (maybe)
            movl    %eax, v        ; store (always)
            popl    %ebp
            ret

Note the last unconditional store to v.  Now, if some thread would
modify v between our load and store (acquiring the mutex first), then
we will overwrite the new value with the old one (and would do that in
a thread-unsafe manner, not acquiring the mutex).

So, do the calls to f(0) require the mutex, or it's a GCC bug?

This very bug was actually already reported for a bit different case,
"Loop IM and other optimizations harmful for -fopenmp"
(http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31862 ; please ignore my
last comment there, as I no longer sure myself).  But the report was
closed with "UNCONFIRMED" mark, and reasons for that are not quire
clear to me.  I tried to dig into the C99 standard and David
Butenhof's "Programming with POSIX Threads", and didn't find any
indication that call f(0) should be also protected by the mutex.

Here are some pieces from C99:

Sec 3.1 par 3: NOTE 2 "Modify" includes the case where the new value
               being stored is the same as the previous value.

Sec 3.1 par 4: NOTE 3 Expressions that are not evaluated do not access
               objects.

Sec 5.1.2.3 par 3: In the abstract machine, all expressions are
                   evaluated as specified by the semantics.

Sec 5.1.2.3 par 5 basically says that the result of the program
execution wrt volatile objects, external files and terminal output
should be the same for all confirming implementations.

Sec 5.1.2.3 par 8: EXAMPLE 1 An implementation might define a
                   one-to-one correspondence between abstract and
                   actual semantics: ...

Sec 5.1.2.3 par 9: Alternatively, an implementation might perform
                   various optimizations within each translation unit,
                   such that the actual semantics would agree with the
                   abstract semantics only when making function calls
                   across translation unit boundaries. ...

I think that the above says that even when compiler chooses to do some
optimizations, the result of the _whole execution_ should be the same
as if actual semantics equals to abstract semantics.  Sec 5.1.2.3 par
9 cited last is not a permission to do optimizations that may change
the end result.  In our case when threads are involved the result may
change, because there's no access to v in the abstract semantics, and
thus no mutex is required from abstract POV.


So, could someone explain me why this GCC optimization is valid, and,
if so, where lies the boundary below which I may safely assume GCC
won't try to store to objects that aren't stored to explicitly during
particular execution path?  Or maybe the named bug report is valid
after all?


Thanks in advance,

-- 
   Tomash Brechko

^ permalink raw reply	[flat|nested] 206+ messages in thread

end of thread, other threads:[~2007-10-31 20:40 UTC | newest]

Thread overview: 206+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <e2e108260710260541n61462585u99de9bc0617720f4@mail.gmail.com>
2007-10-26 13:45 ` Optimization of conditional access to globals: thread-unsafe? Bart Van Assche
2007-10-26 14:38   ` Tomash Brechko
2007-10-26 15:50     ` Ian Lance Taylor
2007-10-26 15:51       ` Tomash Brechko
2007-10-26 16:04         ` Dave Korn
2007-10-26 16:18           ` Tomash Brechko
2007-10-26 17:06             ` Michael Matz
2007-10-26 17:54               ` Tomash Brechko
2007-10-26 17:55                 ` Tomash Brechko
2007-10-28 17:08                   ` Michael Matz
2007-10-28 18:06                     ` Tomash Brechko
2007-10-28 18:43                       ` Tomash Brechko
2007-10-29  1:29                       ` Dave Korn
2007-10-29  2:05                         ` David Miller
2007-10-29  2:54                           ` Dave Korn
2007-10-29  3:04                             ` David Miller
2007-10-29  3:08                             ` David Miller
2007-10-29  4:35                             ` Mark Mielke
2007-10-29  8:03                             ` Tomash Brechko
2007-10-29  8:08                               ` Tomash Brechko
2007-10-29  8:11                                 ` Andrew Pinski
2007-10-29  8:22                                   ` Tomash Brechko
2007-10-29  8:21                                 ` Eric Botcazou
2007-10-29  8:30                                   ` Tomash Brechko
2007-10-29  8:42                                     ` Eric Botcazou
2007-10-29  8:44                                       ` Tomash Brechko
2007-10-29  8:49                                         ` Tomash Brechko
2007-10-29  8:55                                           ` Eric Botcazou
2007-10-29  9:04                                             ` Tomash Brechko
2007-10-29  9:12                                               ` Tomash Brechko
2007-10-29  9:35                                                 ` Tomash Brechko
2007-10-29 22:04                                               ` Eric Botcazou
2007-10-30  7:48                                                 ` Tomash Brechko
2007-10-30  7:55                                                   ` Tomash Brechko
2007-10-30  7:59                                                   ` Eric Botcazou
2007-10-30  8:03                                                     ` Tomash Brechko
2007-10-30  8:20                                                       ` Tomash Brechko
2007-10-30  8:29                                                         ` Eric Botcazou
2007-10-30  9:04                                                           ` Tomash Brechko
2007-10-30 14:48                                                             ` Eric Botcazou
2007-10-30 15:27                                                               ` Tomash Brechko
2007-10-31  2:21                                                                 ` Eric Botcazou
2007-10-29  3:32                           ` skaller
2007-10-29  4:32                             ` David Miller
2007-10-29  4:54                               ` skaller
2007-10-29 15:14                               ` Michael Matz
2007-10-29  5:08                           ` Darryl Miles
2007-10-29  7:43                             ` David Miller
2007-10-29 12:08                               ` Darryl Miles
2007-10-29 12:14                                 ` Robert Dewar
2007-10-29 17:04                                 ` skaller
2007-10-29 16:47                               ` Joe Buck
2007-10-29 15:00                           ` Michael Matz
2007-10-29 16:20                             ` Tomash Brechko
2007-10-29 16:32                               ` Tomash Brechko
2007-10-29 19:43                               ` Duncan Sands
2007-10-29 20:03                                 ` Jack Lloyd
2007-10-29 20:52                                 ` Tomash Brechko
2007-10-29 20:59                                   ` Michael Matz
2007-10-29 21:14                                     ` Tomash Brechko
2007-10-26 21:29               ` Ian Lance Taylor
2007-10-26 21:39                 ` Diego Novillo
2007-10-26 22:38                   ` Ian Lance Taylor
2007-10-26 22:46                     ` Jonathan Wakely
2007-10-26 22:56                     ` Diego Novillo
2007-10-31 22:43                     ` Jason Merrill
2007-10-31 22:50                       ` Jason Merrill
2007-10-26 21:53                 ` Daniel Jacobowitz
2007-10-26 22:20                 ` Jakub Jelinek
2007-10-26 22:55                   ` Ian Lance Taylor
2007-10-27  0:17                 ` skaller
2007-10-27  0:26                   ` David Daney
2007-10-27  0:36                     ` Robert Dewar
2007-10-27  1:29                     ` skaller
2007-10-27 12:51                   ` Andrew Haley
2007-10-26 22:57               ` David Miller
2007-10-28 17:10                 ` Michael Matz
2007-10-29  1:01                   ` David Miller
2007-10-29  2:23                     ` Mark Mielke
2007-10-29 15:09                       ` Michael Matz
2007-10-29 15:16                         ` Mark Mielke
2007-10-29 15:16                         ` Darryl Miles
2007-10-29 15:24                           ` Michael Matz
2007-10-29 15:40                             ` Darryl Miles
2007-10-30 10:28                         ` Tomash Brechko
2007-10-30 14:50                           ` Ian Lance Taylor
2007-10-30 16:17                             ` Tomash Brechko
2007-10-30 17:05                               ` Ian Lance Taylor
2007-10-30 22:01                                 ` Tomash Brechko
2007-10-29  1:05                   ` David Miller
2007-10-29  1:16                     ` Dave Korn
2007-10-29  1:37                       ` David Miller
2007-10-29  3:22                         ` skaller
2007-10-29 11:54                         ` Robert Dewar
2007-10-29 15:21                           ` Michael Matz
2007-10-29 15:34                             ` Robert Dewar
2007-10-29 15:35                               ` Michael Matz
2007-10-29 15:40                                 ` Robert Dewar
2007-10-29 16:29                         ` Joe Buck
2007-10-29 16:53                           ` Robert Dewar
2007-10-26 17:10             ` skaller
2007-10-26 19:11               ` Tomash Brechko
2007-10-26 23:34                 ` skaller
2007-10-27 10:54                   ` Tomash Brechko
2007-10-26 15:24   ` Ian Lance Taylor
     [not found] <Pine.LNX.4.64.0710281753210.23011@wotan.suse.de.suse.lists.egcs>
     [not found] ` <20071028.180108.71876074.davem@davemloft.net.suse.lists.egcs>
     [not found]   ` <02e701c819c7$be985620$2e08a8c0@CAM.ARTIMI.COM.suse.lists.egcs>
     [not found]     ` <20071028.183401.197068473.davem@davemloft.net.suse.lists.egcs>
     [not found]       ` <20071029162032.GA10611@synopsys.com.suse.lists.egcs>
     [not found]         ` <47260E97.4020309@adacore.com.suse.lists.egcs>
2007-10-29 19:51           ` Andi Kleen
2007-10-29 20:00             ` Robert Dewar
2007-10-29 20:10               ` Andi Kleen
2007-10-29 20:19                 ` Robert Dewar
2007-10-29 21:29                 ` skaller
2007-10-29 22:07                   ` Robert Dewar
2007-10-30  1:40                     ` Robert Dewar
2007-10-30  6:37                       ` Eric Botcazou
     [not found] <e2e108260710260634q7a291337s6e66dfa25f28b68a@mail.gmail.com.suse.lists.egcs>
     [not found] ` <e2e108260710260705s170a7c82udb0c9db26a408d84@mail.gmail.com.suse.lists.egcs>
     [not found]   ` <18210.795.425145.46885@zebedee.pink.suse.lists.egcs>
     [not found]     ` <e2e108260710270510j56fe188dkabe070f4c6bcbe0a@mail.gmail.com.suse.lists.egcs>
     [not found]       ` <87hckcpvp5.fsf@mid.deneb.enyo.de.suse.lists.egcs>
     [not found]         ` <e2e108260710270607u6798af5em6467bd38788f48cd@mail.gmail.com.suse.lists.egcs>
     [not found]           ` <87abq4ofym.fsf@mid.deneb.enyo.de.suse.lists.egcs>
     [not found]             ` <e2e108260710280631i405e4fd8te51ff7aa2ebece23@mail.gmail.com.suse.lists.egcs>
     [not found]               ` <472492F8.90700@adacore.com.suse.lists.egcs>
     [not found]                 ` <20071028141821.GA4898@moonlight.home.suse.lists.egcs>
2007-10-29 11:57                   ` Andi Kleen
2007-10-29 12:18                     ` Tomash Brechko
2007-10-29 14:12                       ` Andi Kleen
     [not found] <e2e108260710260541n61462585u99de9bc0617720f4@mail.gmail.com.suse.lists.egcs>
     [not found] ` <e2e108260710260620k2a2e21b3t1d6c052f14d36094@mail.gmail.com.suse.lists.egcs>
     [not found]   ` <20071026143334.GA5041@moonlight.home.suse.lists.egcs>
     [not found]     ` <m38x5pj3ig.fsf@localhost.localdomain.suse.lists.egcs>
     [not found]       ` <20071026155101.GB5041@moonlight.home.suse.lists.egcs>
     [not found]         ` <016201c817e9$5454edd0$2e08a8c0@CAM.ARTIMI.COM.suse.lists.egcs>
     [not found]           ` <20071026161739.GC5041@moonlight.home.suse.lists.egcs>
     [not found]             ` <Pine.LNX.4.64.0710261836440.23011@wotan.suse.de.suse.lists.egcs>
     [not found]               ` <m33avxfu2i.fsf@localhost.localdomain.suse.lists.egcs>
2007-10-27 17:08                 ` Andi Kleen
2007-10-27 18:24                   ` Ian Lance Taylor
     [not found] <e2e108260710260634q7a291337s6e66dfa25f28b68a@mail.gmail.com>
2007-10-26 14:11 ` Bart Van Assche
2007-10-26 15:14   ` Andrew Haley
2007-10-26 15:18     ` Robert Dewar
2007-10-26 15:27       ` Dave Korn
2007-10-26 16:28         ` skaller
2007-10-26 16:38           ` Michael Matz
2007-10-26 17:04         ` Richard Kenner
2007-10-26 16:00       ` Samuel Tardieu
2007-10-26 17:03         ` Samuel Tardieu
2007-10-27  9:33         ` Robert Dewar
2007-10-27 13:49           ` Florian Weimer
2007-10-27 13:59             ` Samuel Tardieu
2007-10-27 14:25               ` Florian Weimer
2007-10-27 19:35                 ` Andrew Haley
2007-10-27 16:25             ` Robert Dewar
2007-10-27 16:43               ` Samuel Tardieu
2007-10-27 12:47     ` Bart Van Assche
2007-10-27 13:07       ` Florian Weimer
2007-10-27 13:16         ` Bart Van Assche
2007-10-27 13:16           ` Andrew Haley
2007-10-27 13:34           ` Florian Weimer
2007-10-28 13:47             ` Bart Van Assche
2007-10-28 13:53               ` Robert Dewar
2007-10-28 15:03                 ` Tomash Brechko
2007-10-28 21:19                 ` Bart Van Assche
2007-10-29  3:19                   ` skaller
2007-10-28 14:18               ` Andrew Haley
2007-10-28 15:07               ` Dave Korn
2007-10-28 17:29                 ` Erik Trulsson
2007-10-28 17:26                   ` Robert Dewar
2007-10-28 17:49                     ` Erik Trulsson
2007-10-28 18:02                       ` Andreas Schwab
2007-10-28 18:40                       ` Dave Korn
2007-10-28 19:15                         ` Erik Trulsson
2007-10-28 20:43                           ` skaller
2007-10-29  5:17                           ` Ross Smith
2007-10-28 17:39                   ` Richard Guenther
2007-10-28 18:03                     ` Erik Trulsson
2007-10-28 20:12                     ` skaller
2007-10-28 23:04                       ` Richard Guenther
2007-10-29  2:39                         ` skaller
2007-10-29  9:52                           ` Samuel Tardieu
2007-10-29 11:24                             ` skaller
2007-10-29 13:57                               ` Darryl Miles
2007-10-29  9:57                     ` Andrew Haley
2007-10-26 16:08   ` skaller
     [not found] <20071022093617.GA5073@moonlight.home.suse.lists.egcs>
     [not found] ` <18204.31027.183382.838763@zebedee.pink.suse.lists.egcs>
     [not found]   ` <20071022105044.GB5073@moonlight.home.suse.lists.egcs>
     [not found]     ` <011501c8149b$b7156c20$2e08a8c0@CAM.ARTIMI.COM.suse.lists.egcs>
     [not found]       ` <20071022111704.GE5073@moonlight.home.suse.lists.egcs>
     [not found]         ` <011601c8149d$7050bea0$2e08a8c0@CAM.ARTIMI.COM.suse.lists.egcs>
     [not found]           ` <20071022112643.GG5073@moonlight.home.suse.lists.egcs>
     [not found]             ` <012501c814b2$f4623470$2e08a8c0@CAM.ARTIMI.COM.suse.lists.egcs>
     [not found]               ` <20071022143215.GH5073@moonlight.home.suse.lists.egcs>
     [not found]                 ` <Pine.LNX.4.64.0710221757450.23011@wotan.suse.de.suse.lists.egcs>
     [not found]                   ` <20071022171757.GI5073@moonlight.home.suse.lists.egcs>
     [not found]                     ` <18204.57073.943880.741269@zebedee.pink.suse.lists.egcs>
2007-10-22 18:11                       ` Andi Kleen
2007-10-21 14:55 Tomash Brechko
2007-10-21 15:26 ` Erik Trulsson
2007-10-21 16:16   ` Tomash Brechko
2007-10-21 18:51     ` Richard Guenther
2007-10-22  1:16     ` skaller
2007-10-21 23:07 ` Dave Korn
2007-10-22  1:25   ` skaller
2007-10-22 10:32     ` Dave Korn
2007-10-22  9:36   ` Tomash Brechko
2007-10-22 10:09     ` Erik Trulsson
2007-10-22 10:15       ` Robert Dewar
2007-10-23 16:53         ` Paul Brook
2007-10-22 17:59       ` skaller
2007-10-22 10:19     ` Andrew Haley
2007-10-22 10:50       ` Tomash Brechko
2007-10-22 10:54         ` Dave Korn
2007-10-22 11:10           ` Tomash Brechko
2007-10-22 11:00         ` Tomash Brechko
2007-10-22 11:07         ` Dave Korn
2007-10-22 11:17           ` Tomash Brechko
2007-10-22 11:19             ` Dave Korn
2007-10-22 11:26               ` Tomash Brechko
2007-10-22 13:53                 ` Dave Korn
2007-10-22 14:32                   ` Tomash Brechko
2007-10-22 16:15                     ` Michael Matz
2007-10-22 16:22                       ` Dave Korn
2007-10-22 17:18                       ` Tomash Brechko
2007-10-22 17:33                         ` Andrew Haley
2007-10-22 17:44                           ` Tomash Brechko
2007-10-22 17:48                             ` Andrew Haley
2007-10-22 18:00                               ` Tomash Brechko
2007-10-23  9:45                                 ` Andrew Haley
2007-10-22 17:51                           ` Dave Korn
2007-10-22 18:15                     ` skaller
2007-10-22 18:26                       ` Andrew Pinski
2007-10-22 11:08         ` Andrew Haley
2007-10-22 11:21           ` Tomash Brechko
2007-10-26 21:24       ` Florian Weimer
2007-10-27 18:15 ` Darryl Miles
2007-10-27 21:35   ` Dave Korn
2007-10-27 22:58     ` Darryl Miles

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).