gpt4 book ai didi

c++ - 访问静态初始化的 __thread 变量时出现段错误

转载 作者:IT王子 更新时间:2023-10-29 00:59:52 25 4
gpt4 key购买 nike

考虑以下代码:

#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

关于c++ - 访问静态初始化的 __thread 变量时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20410943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com