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.
