Box and Rc and their equivalents in C++

How do you think people use shared_ptr with threads before C++20? Also note this:

To satisfy thread safety requirements, the reference counters are typically incremented using an equivalent of std::atomic::fetch_add with std::memory_order_relaxed (decrementing requires stronger ordering to safely destroy the control block).