0

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

4

3 回答 3

2

是的,一个类static成员在该类的所有实例之间共享。可以通过标记来限制它的范围publicprotected或者private。如果您要让多个线程同时访问/改变static成员,那么您将需要同步此访问,例如通过互斥锁。

于 2012-08-16T06:32:27.620 回答
2

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

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

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

于 2012-08-16T06:43:36.957 回答
1

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

于 2012-08-16T06:30:30.197 回答