https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126235

--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Wolfgang Hoffmann from comment #2)
> To my understanding, the load/store operations should be atomic in the sense
> that concurrent action is serialized in arbitrary order, but done
> atomically.

I don't know what you mean by "atomically", but
std::atomic<std::shared_ptr<T>>::is_always_lock_free is false, which means that
operations on that type are *not* actually atomic, they are protected by a
lock.

The std::atomic_load and std::atomic_store functions are also protected by a
lock but they use a POSIX mutex to serialize and so maybe the difference is
that libc makes the low-prio thread inherit the priority of the high-prio
thread when contended on the same mutex.

The locking done by std::atomic<std::shared_ptr<T>> is not based on POSIX
mutexes, just a spinlock on a single bit. There's no priority inheritance.

So I think Drea is correct in comment 1.

Reply via email to