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

时间:2012-08-16 06:28:57

标签: c++ operating-system

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

3 个答案:

答案 0 :(得分:2)

是的,类static成员在该类的所有实例中共享。可以通过标记范围publicprotectedprivate来限制范围。如果您要让多个线程同时访问/变更static成员,那么您需要同步此访问权限,例如通过互斥。

答案 1 :(得分:2)

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

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

不幸的是,主要的编译器(GCC,Clang,VC ++)都没有完全实现它。

答案 2 :(得分:1)

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