考虑下面的代码:
#include <stdio.h> __thread bool foo = true; int main() { printf("foo = %d\n", foo); return 0; }
编译并运行:
$ g++ tls.cpp -o tls -o tls $ ./tls
在某些系统上(例如Amazon Linux 2013.09.0,ami-5b792c32,kernel 3.4.62-53.42.amzn1.i686,g ++ 4.6.3 20120306(Red Hat 4.6.3-2)),会导致分段错误只要foo
被访问。
另一方面,在代码中显式初始化foo
不会导致分段错误:
#include <stdio.h> __thread bool foo = true; int main() { foo = true; /* Added!! */ printf("foo = %d\n", foo); return 0; }
为什么第一个代码示例在某个系统上崩溃,而后者不? __threadvariables的静态初始化不应该工作? 操作系统可能被破坏?
你忘了告诉编译器你想要线程支持。 标志很可能是-pthread
。