std::shared_ptr 并发访问完整性检查

std::shared_ptr concurrent access sanity check

我正在努力确保我正确理解 ,其中:

考虑到这一点,请考虑以下代码段:

struct Data {
    std::shared_pointer<X> x;
    std::shared_pointer<Y> y;
};

void SomeThread1 (Data d) {
    std::shared_pointer<X> localxptr = d.x;
    ...
}

void SomeThread2 (std::shared_ptr<Data> d) {
    std::shared_pointer<X> localxptr = d.x;
    ...
}

假设 SomeThread[12] 是它们自己的线程,并且创建它们的人都传递了适当的参数,我是否正确地相信:

我的评估正确吗?

看起来很明显,但我只是想进行完整性检查,因为最近我盯着大量代码看的时间太长了。

您链接的另一个问题似乎提供了答案:这取决于其他线程可能在做什么。

A shared_ptr 不是线程安全的如果它以非常量方式使用。但是,您只是将它传递给 the copy constructor (9),它接受它作为 const 引用。如果所有其他线程都以相同的方式访问它(none 其中的线程试图修改它),这是安全的。