【发布时间】:2013-01-07 07:37:27
【问题描述】:
我有一个线程局部变量envptr 和不是线程局部的变量也称为envptr。后一个变量仅在运行代码看不到线程局部变量声明的单个线程中使用。线程局部变量被不同的线程使用,每个线程看不到也不需要看到非线程局部变量的声明。
这种情况是否可能并产生已定义的行为?我在 x86 上使用 linux 32 位和 64 位。
【问题讨论】:
-
有一个
envptr将如何用__thread装饰的示例代码(?),但另一个没有?我能想象到的唯一方法是两个不同文件中的非外部文件.. 如果是这样,那么在这种情况下似乎可以简单地回答。 -
@pst 是的,就是这样做的。它们在 cpp 文件中声明,并且在标头中提供了函数
Env *getEnv();。每个.cpp文件对它的定义都不同。使用 TLS 版本的线程运行在来自.so文件的代码上,该文件加载到与使用非 TLS 变量(这是 REPl shell 使用的 LLVM JIT 编译器)的主线程相同的进程中。 -
我投票关闭,因为我认为它有一个非常简单的解决方案:我将为链接到 DLL 的 .cpp 文件和链接到主可执行文件的 .cpp 文件使用不同的名称.编辑:这会限制 .so 文件的适用性,所以我还是想尝试其他方法。
标签: c++ c thread-local