C++ 11 thread_local 和 "foreign"线程

标签 c++ c++11 stdthread thread-local-storage

我想使用 C++ 11 thread_local,但我们的应用程序嵌入了一个 JVM,有时 C++ 方法是通过 JNI 从 Java 创建的线程调用的。这本质上是同一个问题,就好像外部“C”库创建了一个线程并回调到我的 C++ 代码中一样。 thread_local 变量的行为是在这些情况下定义的吗?我的代码有什么方法可以补偿意外出现的外来线程吗?线程退出时的销毁怎么样?

编辑:C++ 是通过 JNI 从 JVM 线程调用的事实并不是真正的中心点。 任何外来线程(不是由 std::threadmain() 创建的)大概都会有同样的问题。

编辑:我感兴趣的 JVM 是 Windows 和 Linux(Ubuntu 和 RedHat)上的 OpenJDK(nee Oracle)x64 实现

最佳答案

如果你在 jni 中使用你的代码。然后你使用特殊的编译器来编译你的c++代码。

例如android可以调用基于NDK的c++函数。 并且有专门的编译器来编译c++代码。如果代码已编译,则此编译器中存在函数和实现。

如果外部“C”库创建了一个线程并回调到我的 C++ 代码中。我的 c++ 站点上的线程实现将是基于工作站的 Windows 或 Linux。该实现将调用特定的代码窗口或 Linux 来获得我想要的。就像 c 中的 fopen 或 std::fstream 打开。它将调用在编译器中实现的实现。在linux下在windows下打开一些winapi调用。

因此,如果实现它应该会起作用。

关于C++ 11 thread_local 和 "foreign"线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51116820/

相关文章:

c++ - 使用 "operator T*()"而不是 "T* operator->()"进行成员访问

c++ - Viola-Jones 人脸检测方法是如何工作的?

c++ - 类内的多个线程访问数据

c++ - 将指针作为参数传递给 std::thread 函数 C++11

c++ - 获取 std::function 的可变参数模板参数类型的自定义 sizeof

c++ - 将回调函数中的对象引用传递给 std::thread

C++ 固定数量的 vector 大小作为类成员

c++ - 错误 MSB6006 : "cmd.exe" exited with code 1 running QT application

c++ - 模板成员变量特化

c++ - 由于继承而返回拷贝的堆栈?