假设:
class Foo {
Foo() {};
};
class Bar {
static int counter;
Bar() { ++counter; }
}
很明显,Foo :: Foo是线程安全的,而Bar :: bar不是。
此外,很明显,如果函数以这样的方式编写,使得它不是线程安全的,那么明确地将它放在构造函数中会使该构造函数不是线程安全的。
然而,是否有额外的问题需要担心构造函数?即一段带有互斥锁/锁的代码,如果它在函数体中,它将是线程安全的,但如果我把它放在构造函数中,基于C ++构造函数的复杂性,会发生奇怪的事情并且它不再是线程安全的?
谢谢!
编辑:你可以假设我正在使用g ++。
答案 0 :(得分:1)
我会避免线程使用的对象中的任何静态值。
为什么不将所需的值作为构造函数的参数传递?
或者实际上,在线程中的构造函数周围放置一个互斥锁。我不会让其他班级对此负责。