##shared_ptr thr-safety: 3 cases is a “framework”.
http://www.boost.org/doc/libs/1_35_0/libs/smart_ptr/shared_ptr.htm#ThreadSafety gave simple examples of unsafe access.
//— Example 3, where the shared mutable is a club member p3 ——————
// thread A
p = p3; // reads p3, writes p
// thread B
p3.reset(); // writes p3: Undefined, simultaneous read/write
I gave this example correctly to a Sep 2018 SCB interview 🙂
===> In the same clock cycle, p3 Object is accessed on 2 threads. This is nothing to do with the ref count, or the pointee object.
//— Example 4, where the shared mutable is a club member p2 ——————
// thread A
p3 = refToP2; // reads p2, writes p3
// thread B
// p2 goes out of scope: Undefined, simultaneous read/write since the destructor is considered a “write access”
===> In the same clock cycle, p2 Object gets write-accessed.