3
IMAGIN这样的:通过C函数调用线程安全的静态初始化?
void *ImCalledByThreads (/*...*/)
{
//some stuff
static typePlaceholder AmIThreadSafe = QuestionTag();
//other stuff
}
这是初始化线程?
即使QuestionTag()
是线程安全的,如果第一个线程运行该函数而另一个线程调用此行,会发生什么情况。是否会检测到函数只会执行一次?或者这对于多线程来说只是一个坏主意?
这不是合法的C代码。但是如果你在谈论C++而不是C,那么它肯定不是线程安全的。我不确定C++ 11是怎么说的,但C++ 03和更早版本根本没有提到线程。从我从各种编译器看到的生成代码中,他们不会在变量初始化的基础上添加任何同步原语。 –
@AdamRosenfield它在gcc(C++)中是线程安全的,C++ 11要求它是 – nos
愚蠢的MSVC ....我说的是纯粹的C但是我只是在Windows上测试了这个,没有错误。但是我忘记了这对C++标准来说是不可靠的,因为MSVC期望C代码。不管怎么说,还是要谢谢你。 – dhein