问题描述
在我的项目中,我使用第三方 DLL,它会创建一些线程,这些线程又会调用我的函数。第三方DLL中的线程是用_beginthreadex()创建的,DLL是用MSVC编译的。 我的项目是用 MINGW 编译的。
在我的函数中,我使用线程局部变量,使用 __thread 关键字,如下所示:
__thread Env* env;
Env* getEnv() {
if(env) return env;
return env = createNewEnv();
}
// called by the 3rd-party thread
void myFunction() {
Env* env = getEnv();
// do work
}
第三方库有时会杀死所有线程,然后再生成新线程,我会收到通知。为了防止内存泄漏,我需要删除由现在死掉的线程创建的 Env 实例。问题是我不知道如何访问这些实例,因为指针是线程本地的。
我在谷歌上搜索了一个使用 MINGW 运行时中存在的 pthread_cleanup_push() 函数的想法。这将理想地解决我的问题,但我不确定它是否适用于使用 _beginthreadex() 创建的线程。
有什么想法吗?可能存在另一种解决方法吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)