鉴于以下示例:
struct test
{
const char* data;
const int number;
};
struct test* foo()
{
static struct test t = {
"this is some data",
69
};
return &t;
}
调用foo
是线程安全的吗?换句话说,结构体是否以线程安全的方式仅在一个线程中初始化?这是否会因为编译语言是C还是C++而有所不同?
t
的初始化是线程安全的。 在C++11之前,它不是线程安全的(因为早期标准根本没有与线程相关的规定)。 我相信在C中,t
的初始化也是线程安全的,主要是因为在C中静态变量只能使用文字(编译时常量)进行初始化[从中我推断出结构将在任何线程访问它之前被初始化]。 - Peter