分享静态成员的范围是什么?
答案 0 :(得分:2)
是的,类static
成员在该类的所有实例中共享。可以通过标记范围public
,protected
或private
来限制范围。如果您要让多个线程同时访问/变更static
成员,那么您需要同步此访问权限,例如通过互斥。
答案 1 :(得分:2)
是的,static
存储持续时间意味着有问题的变量在流程启动时就会存在,并且在流程结束之前不会被释放。它由进程的所有线程共享,访问它可能导致线程之间的数据争用,就像使用全局变量一样。
C ++ 11引入了一个新的存储持续时间说明符thread_local
,其使用意味着每个单独的线程中都有一个变量实例。它在线程开始时分配。
不幸的是,主要的编译器(GCC,Clang,VC ++)都没有完全实现它。
答案 2 :(得分:1)
是的,线程不会影响静态存储。您可以将static
成员视为全局变量。因此,修改static
不是线程安全的,需要考虑的事情。