我的不同线程是否会看到更新后的shared_ptr对象
Does my different threads will see the updated shared_ptr object
我有多个线程从多个共享对象中读取。这些对象中的每一个都包含指向一个点的shared_ptr:
struct Point
{
int x;
int y;
}
shared_ptr<Point> dataPtr=std::make_shared<Point>(Point(...init...)); // at compile time
然后我将它传递给我的不同对象的复制构造函数
Object1 obj1 = Object1(..., dataPtr, ...)
Object2 obj2 = Object2(... , dataPtr, ...)
在某个时刻,我将通过以下操作更新基本点:
dataPtr.get().x=newvalue;
我不必考虑任何种族场景,读者在写新的价值观之前都会睡着。然而,我想和你核实一下,所有线程在更新后都会看到newvalue,这不是一种"缓存而看不到更新"的情况。
Thks
是的,所有线程都将看到来自cppreference:的新值
所有成员函数(包括复制构造函数和复制赋值)可以由shared_ptr的不同实例上的多个线程调用即使这些实例是副本,也不需要额外的同步并共享同一对象的所有权。
但是您不必使用get()来访问存储的指针,这是更好的样式:
dataPtr->x = newvalue;
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 将GoogleMock与Boost::Shared Pointers一起使用时泄漏的Mock对象
- 在python中打开共享对象文件时出错(OSError: cannot open shared object file: