是指向用户定义对象的c++指针,可线程安全读取
are c++ pointers to user-defined objects thread safe for reading?
我找不到答案,但这是一个简单的问题:
两个线程在没有锁或任何其他恶作剧的情况下同时读取指向c++中用户定义对象的指针值是否安全?
是。实际上,同时读取任何值(内置类型)都是安全的。
只有当一个值与其他使用它的线程同时修改时,才会发生数据争用
数据竞赛定义见§1.10/21:
一个程序的执行包含一个数据竞赛,如果它包含两个不同线程中的冲突操作,其中至少有一个不是原子,两者都不发生在另一个之前。
其中冲突在§1.10/4:中定义
如果其中一个表达式求值修改了内存,则两个表达式求值冲突位置(1.7),而另一个访问或修改相同的内存地方
因此,您必须在这些读取和任何写入之间使用适当的同步。
从多个线程读取值总是安全的。只有当您还在向数据写入时,才需要管理并发访问。
只读数据唯一可能的问题是确保在读取完成时该值实际上已经初始化。如果在启动线程之前初始化该值,那么就可以了。
如果变量在其中一个线程中被修改,通常是不安全的。
我认为线程安全是指询问它们是否有原子写入。在C++03中,这不是真的,因为C++03并不真正了解线程。在C++11中,您有std::atomic,它专门用于指针。
相关文章:
- 如何检索指向在单独线程上运行的函数的移动指针?
- 如何将'this'指针传递给C++ WinAPI 线程?
- 从子线程访问指针
- 将字符串指针传递到C++和Xcode 11.1中不同线程上运行的函数
- 通过std::shared_ptr使用Rcpp和RcppParallel的线程安全函数指针
- 在多线程函数中返回共享的常量指针会导致计时问题吗?
- 线程中的成员函数指针
- 如何安全地终止线程?(使用指针)C++
- 指向成员对象的指针 - 中断线程
- 是否可以访问非线程安全容器内指针指向的值(线程安全映射中的条目)?
- 如何抓取指向Qt中弹出对话框的指针,该对话框阻止了QTest中的UI线程
- 将指针传递到另一个线程的正确方法
- CPP:如何使用需要指针的方法创建线程
- 启动线程会导致指针初始化时出现分段错误
- 是否访问指针元组和互斥锁线程安全
- 在容器中存储指向对象的指针时的线程安全
- 为什么当我在构造函数中创建线程时,实例化对象和对象的指针的行为不同
- 指针在不同的线程中获得错误的价值
- C++ 线程函数指针实现返回错误无效使用非静态成员函数
- 指向对象初始化的静态指针——线程安全