C ++ g ++线程安全构造函数

时间:2010-02-16 04:13:12

标签: c++ g++ thread-safety constructor

假设:

class Foo {
  Foo() {};
};

class Bar {
  static int counter;
  Bar() { ++counter; }
}

很明显,Foo :: Foo是线程安全的,而Bar :: bar不是。

此外,很明显,如果函数以这样的方式编写,使得它不是线程安全的,那么明确地将它放在构造函数中会使该构造函数不是线程安全的。

然而,是否有额外的问题需要担心构造函数?即一段带有互斥锁/锁的代码,如果它在函数体中,它将是线程安全的,但如果我把它放在构造函数中,基于C ++构造函数的复杂性,会发生奇怪的事情并且它不再是线程安全的?

谢谢!

编辑:你可以假设我正在使用g ++。

1 个答案:

答案 0 :(得分:1)

我会避免线程使用的对象中的任何静态值。

为什么不将所需的值作为构造函数的参数传递?

或者实际上,在线程中的构造函数周围放置一个互斥锁。我不会让其他班级对此负责。