On Sun, Oct 28, 2007 at 09:47:36 -0400, Robert Dewar wrote:
> Bart Van Assche wrote:
> 
> >Requiring that all thread-shared variables should be declared
> >volatile is completely unacceptable.
> 
> Why is this unacceptable .. seems much better to me than writing
> undefined stuff.

There's a parallel thread in the Linux Kernel Mailing List.  Everyone
is advised to read it, if not already.  There are several good points
there:

  - the problem is not limited to multithreaded domain: the page with
    the object could be made read-only during execution, thus

       if (! page_is_read_only)
         v = 1;

    would SIGSEGV for no apparent reason.

  - making things volatile is unacceptable from performance POV.

  - optimization in question might well turn out to be misoptimization
    for anything but microbenchmarks (read LKML for cache flush/dirty
    page issues).

  - "people knowledgeable in POSIX say that this optimization is
    bogus".  I would add that though we may say that Standard C is not
    aware of threads, POSIX _is_ aware of Standard C.  While POSIX
    failed to solve the issue by formal word, its intent is clear: to
    make POSIX Threads usable.  The compiler that claims to be POSIX
    compatible should take this into account.

  - there's also a good talk on lawyer-ish vs attached-to-reality
    approach.  I personally doubt those who continue to advise to use
    volatile are actually writing such multithreaded programs.  Most
    argue just for the fun of it.


> Well Hans is talking about C/C++, you are talking about some other
> language in which programs which do not have well defined semantics
> in C or C++ do have well defined semantics in your language.

Good thing we have this _bug_ in languages that define memory
semantics (Ada, Java), and no one yet argues that GCC should be fixed
wrt to only those languages.


-- 
   Tomash Brechko

Reply via email to