类的实例是否仍在同一进程内的线程之间共享相同的静态成员
Does the instances of a class still share the same static members between thread inside the same process?
这就是共享静态成员的范围是什么?
是的,static
存储持续时间意味着有问题的变量在进程启动时就存在,并且在进程结束之前没有释放。它由进程的所有线程共享,访问它可能会导致线程之间的数据争用,就像使用全局变量一样。
C++11引入了一个新的存储持续时间说明符thread_local
,它的使用意味着在每个单独的线程中都有一个变量的实例。它在线程开始时分配。
不幸的是,没有一个主要的编译器(GCC,Clang,VC++)完全实现了这一点。
是的,类static
成员在该类的所有实例之间共享。它的范围可以通过将其标记为public
、protected
或private
来限制。如果要让多个线程同时访问/更改static
成员,则需要同步此访问,例如通过互斥锁。
是的,线程不会影响静态存储。您可以将static
成员视为全局变量。因此,修改static
不是线程安全的,需要考虑一些事情。
相关文章:
- 在cuda线程之间共享大量常量数据
- 线程之间的布尔停止信号
- 线程之间的实时数据共享
- 线程之间的通信不起作用 - C++
- 简单使用 std::atomic 在两个线程之间共享数据
- 不同线程之间的互斥锁同步
- 多个线程之间的获取-释放内存顺序
- 如何在两组线程之间正确来回传输控制权
- 如果两个线程调用同一个函数,但函数中的所有变量都是局部变量,我还需要担心线程之间共享数据吗?
- 填充和保存线程之间的共享缓冲区
- 在C 中共享线程之间的列表
- 在 API 和应用程序线程之间共享数据
- 将线程之间的标准输入/输出重定向
- Boost::线程如何在主线程和工作线程之间同步
- std::线程之间的互斥体同步
- C++ - 多线程 - 线程之间的通信
- Qthread char阵列在两个线程之间传递后被摧毁
- 线程之间类的静态数据共享
- 增强ASIO和线程之间的消息传递
- 将数组分配在固定数量的线程之间