小编Vla*_*mir的帖子

静态指针指向对象初始化线程安全

在C++ 11中,以下是线程安全的:

void someFunc()
{
    static MyObject object;
}
Run Code Online (Sandbox Code Playgroud)

但是关于

void someFunc()
{
    static MyObject *ptr = new MyObject();
}
Run Code Online (Sandbox Code Playgroud)

这是否是线程安全的?

正如@Nawaz在评论中提到的那样,可能MyObject构造函数不是线程安全的,所以让我们将问题分成几部分:

1)如果ctor是线程安全的(它不访问任何共享状态),这是否是static MyObject *ptr = new MyObject();线程安全的?换句话说,是static int *ptr = new int(0);线程安全的吗?

2)如果ctor不是线程安全的,但是只能通过someFunc从不同的线程调用来创建对象,并且构造函数从未在其他任何地方使用过,那么这是否是线程安全的呢?

c++ thread-safety static-initialization c++11

9
推荐指数
1
解决办法
749
查看次数

标签 统计

c++ ×1

c++11 ×1

static-initialization ×1

thread-safety ×1