我使用boost的线程本地存储。
SolutionA
tls.h
中的extern __declspec(dllexport) boost::thread_specific_ptr<int> ThreadLocalStorage;
(dll):
tls.cpp
在同一解决方案中,但在__declspec(dllexport) boost::thread_specific_ptr<int> ThreadLocalStorage;
中:
SolutionB
file.pp
__declspec(dllimport) boost::thread_specific_ptr<int> ThreadLocalStorage;
中的ThreadLocalStorage
(dll):
SolutionB
这一切都有问题。
但是在运行时我尝试更改reset
中_Block_Type_Is_Valid (pHead->nBlockUse) Error
的值以及我声明的release
函数:
reset
现在我可以通过在SolutionA
之前调用ThreadLocalStorage
来解决这个问题,但是当我从此函数返回ThreadLocalStorage
并尝试获取#include <boost/thread/tss.hpp>
namespace threads {
extern __declspec(dllexport) boost::thread_specific_ptr<int> TlsStorage;
extern __declspec(dllexport) int tls_value_storage = 0;
}
时,我会看到一些随机值。
我似乎有#include <Include/ThreadLocalStorage.h>
namespace threads {
__declspec(dllexport) boost::thread_specific_ptr<int> TlsStorage;
extern __declspec(dllexport) int tls_value_storage;
}
的2个不同实例,我该如何解决这个问题?
@Edit:这是多个TLS实例的问题,而不是从dll导出/导入的。
我试着总结一切:
我尝试导出线程本地存储(dllexport) 来自firstmodule并导入secondmodule(dllimport)但没有效果。在firstmodule我有包含/ ThreadLocalStorage.h和delaration:
namespace threads {
extern __declspec(dllimport) boost::thread_specific_ptr<int> TlsStorage;
extern __declspec(dllimport) int tls_value_storage2;
}
整数tls_value_storage仅用于测试目的。还有Src / ThreadLocalStorage.cpp:
threads::TlsStorage.reset(&new_language_value);
int *sanity_check = threads::TlxStorage.get(); //.get() return proper value
Funtion();
和最后一个:在second模块模块中的stdafx.h中:
int sanity_check_1 = threads::tls_value_storage; //Proper value
int *sanity_check_2 = threads::TlsStorage.get(); // Something bad happens, return uninitialized tls
但毕竟当我尝试在secondmodule
中更改set tls时error LNK2001: unresolved external symbol "__declspec(dllimport) class boost::thread_specific_ptr<int> threads::TlsStorage" (__imp_?TlsStorage@threads@tlx@@3V?$thread_specific_ptr@H@boost@@A)
现在我们转到firstmodule,function()(使用相同的线程)
library(data.table)#v >= 1.9.5 (devel version - install from GitHub).
#library(devtools)
#install_github("Rdatatable/data.table", build_vignettes = FALSE)
as.data.table(example)[, res:=(NA | (min(example)< -1))*example, by=rleid(is.na(example))][, res]
我认为在__declspec(dllexport)boost :: thread_specific_ptr TlsStorage之前可能是缺少extern的错 在ThreadLoalStorage.cpp中但是当我添加“extern”时,我有:
{{1}}
在编译过程中。也许这是一个问题吗?