【发布时间】:2010-02-01 22:20:50
【问题描述】:
即,即使在多线程环境中,以下内容是否也能正确执行?
int dostuff(void) {
static int somevalue = 12345;
return somevalue;
}
或者是否有可能多个线程调用它,并且一个调用返回在执行开始之前&somevalue 处的任何垃圾?
【问题讨论】:
-
static const 不是一个选项?
-
constness 在这里不起作用,因为 int 稍后会被修改(同时持有一个已知有效的互斥锁。)我的直觉是任何理智的编译器都会至少零初始化静态开始执行之前函数范围内的整数(在这种情况下,这对我来说已经足够了。)不过,这种事情很容易出错。
-
技术上没有。但是 gcc 有一个明确的补丁来保证它可以在多线程环境中工作。
-
确实——不幸的是,我的代码也需要为 VC++ 9.0 编译,这意味着我必须编写避免 GCC 特定内容的代码。在这种情况下,代码最终的功能类似于 pthread_once(现在我想起来,在 C++ 中会遇到同样的问题),但由于 VC++ 要求不能直接使用 pthread_once。
-
@Martin: ... 除非使用“-fno-thread-safe-statics”命令行选项明确禁用它(参见gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html)。 +1,无论如何。
标签: c++ static multithreading constants