[英]Segmentation fault when accessing statically initialized __thread variable
請考慮以下代碼:
#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,內核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;
}
為什么第一個代碼示例在某些系統上崩潰,而后者卻沒有? 是否__thread變量的靜態初始化不起作用? 可能會破壞操作系統?
你忘了告訴編譯器你想要線程支持。 最有可能的是,標志是-pthread
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.