public inbox for libstdc++@gcc.gnu.org
 help / color / mirror / Atom feed
From: Jonathan Wakely <jwakely.gcc@gmail.com>
To: Amar Memic <amemic@uni-osnabrueck.de>
Cc: "libstdc++" <libstdc++@gcc.gnu.org>
Subject: Re: 6.55 Built-in Functions for Memory Model Aware Atomic Operations
Date: Wed, 21 Jul 2021 10:47:49 +0100	[thread overview]
Message-ID: <CAH6eHdTAmGEWCnvy0d-jOi4zOm0eOA2BirxjuzyirEvxT1+KMg@mail.gmail.com> (raw)
In-Reply-To: <49b2-60f7d900-cf7-23647ec0@27167096>

This doesn't seem relevant to the libstdc++ list, as those built-in
functions are part of the compiler, not the std::lib.

On Wed, 21 Jul 2021 at 09:22, Amar Memic wrote:
>
>
> Hi,6.55 Built-in Functions for Memory Model Aware Atomic Operations (https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html)  says:Note that the ‘__atomic’ builtins assume that programs will conform to the C++11 memory model. In particular, they assume that programs are free of data races. See the C++11 standard for detailed requirements.
>
> I think the second sentence is a bit misleading because atomics should handle data races.

It depends what you mean "handle data races". You can just sprinkle
some atomics and assume you've removed data races. The C++11 memory
model requires that all potentially concurrent access to a memory
location are atomic. That means you can't use an atomic write in one
thread and a concurrent non-atomic read in another thread, because
that would be a data race. The __atomic built-ins assume that you
don't do that.


> Especially, interleaving read/write or write/write operations should be well-defined.

If all reads and writes use atomic operations, yes.

> If you assume that programs are free of data races, then you could not implement spinlock based on these atomics, for example.

I think maybe your definition of "data race" doesn't match the
intended meaning here. You might be thinking of what is more correctly
called a "race condition". The C++ standard defines a "data race"
precisely:

"The execution of a program contains a data race if it contains two
potentially concurrent conflicting actions, at least one of which is
not atomic, and neither happens before the other, except for the
special case for signal handlers described below. Any such data race
results in undefined behavior."

This means a data race is a specific kind of race condition, which
results in undefined behaviour.

See https://blog.regehr.org/archives/490 and
https://en.wikipedia.org/wiki/Race_condition#Data_race

  reply	other threads:[~2021-07-21  9:48 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-21  8:20 Amar Memic
2021-07-21  9:47 ` Jonathan Wakely [this message]
2021-07-21  9:49   ` Jonathan Wakely
2021-07-21 13:09     ` Jonathan Wakely

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAH6eHdTAmGEWCnvy0d-jOi4zOm0eOA2BirxjuzyirEvxT1+KMg@mail.gmail.com \
    --to=jwakely.gcc@gmail.com \
    --cc=amemic@uni-osnabrueck.de \
    --cc=libstdc++@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).