类的实例是否仍在同一进程内的线程之间共享相同的静态成员

Does the instances of a class still share the same static members between thread inside the same process?

本文关键字:线程 之间 静态成员 共享 是否 实例 进程      更新时间:2023-10-16

这就是共享静态成员的范围是什么?

是的,static存储持续时间意味着有问题的变量在进程启动时就存在,并且在进程结束之前没有释放。它由进程的所有线程共享,访问它可能会导致线程之间的数据争用,就像使用全局变量一样。

C++11引入了一个新的存储持续时间说明符thread_local,它的使用意味着在每个单独的线程中都有一个变量的实例。它在线程开始时分配。

不幸的是,没有一个主要的编译器(GCC,Clang,VC++)完全实现了这一点。

是的,类static成员在该类的所有实例之间共享。它的范围可以通过将其标记为publicprotectedprivate来限制。如果要让多个线程同时访问/更改static成员,则需要同步此访问,例如通过互斥锁。

是的,线程不会影响静态存储。您可以将static成员视为全局变量。因此,修改static不是线程安全的,需要考虑一些事情。