gpt4 book ai didi

C++ 11 thread_local 和 "foreign"线程

转载 作者:太空宇宙 更新时间:2023-11-04 12:46:52 25 4
gpt4 key购买 nike

我想使用 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/

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