【发布时间】:2018-04-28 01:07:11
【问题描述】:
我可以为 C++ 中的静态类数据成员假设线程安全吗?在下面的例子中,SetCounter 是线程安全的吗?
class Foo {
public:
static void SetCounter(int c) { counter = c; }
private:
static int counter = 0;
}
【问题讨论】:
-
不,静态类成员没有任何神奇的线程安全属性。它们只是具有花哨名称的全局变量。
-
添加到这个;如果您的类只有静态成员,您可能需要考虑使它们成为非静态成员,在类中放置一个互斥锁以使类线程安全,然后使用该类的静态/单例实例来代替..作为另一种选择.
-
@IgorTandetnik 但是局部静态变量可以,我们可以在制作单例类时依赖该属性。是否有任何 C++ 文档解释了哪些类型的静态是线程安全的?
-
不,局部静态变量也不是线程安全的。只有它们的初始化是,而不是后续使用。
标签: c++