簡體   English   中英

訪問靜態初始化的__thread變量時出現分段錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM