C++11中,以下内容是线程安全的:
void someFunc()
{
static MyObject object;
}
但是这和什么有关呢?
void someFunc()
{
static MyObject *ptr = new MyObject();
}
那么这个代码是线程安全的吗?
正如@Nawaz在评论中提到的,可能MyObject构造函数不是线程安全的,因此让我们分成几个部分来回答问题:
1)如果构造函数是线程安全的(它不访问任何共享状态),那么static MyObject *ptr = new MyObject();
是线程安全的吗?换句话说,static int *ptr = new int(0);
是线程安全的吗?
2)如果构造函数不是线程安全的,但对象只能通过从不同的线程调用someFunc
来创建,并且构造函数从未在其他任何地方使用,那么这种情况是否安全?
static MyObject object;
不是线程安全的。然而,static int object = 100;
是100%线程安全的。 - Nawaz