我正在开发一个包含DLL的Dot Net项目.此DLL使用.lib(C代码).不幸的是,这个.lib中有许多静态变量.我在这里遇到的问题:
如果两个用户同时执行搜索,我会收到一个错误,因为他们都访问.lib,一个更改某些内容而另一个尝试读取数据.
显而易见的解决方案是锁定访问权限,但我真的不想这样做,因为这会大大减慢搜索过程.我宁愿尝试从lib创建一个DLL,但我不知道这是否会解决问题,因为我不知道静态变量是否会单独存储,或者两个搜索进程是否都会访问变量.
有任何人对此有经验吗?因为这需要相当长的时间才能做到这一点,而且在开始这样做之前我想知道它是否有效.
我希望一切都是可以理解的,因为英语不是我的第一语言,而且我的编程技巧非常基础.
我目前在项目中有以下代码:
std::vector<int> vectorOfFirsts;
std::set<double> setOfSeconds;
std::list<std::pair<int,double>> cachedList;
// do something to fill the list
for (const auto& pair : cachedList)
{
vectorOfFirsts.push_back(pair.first);
setOfSeconds.insert(pair.second);
}
Run Code Online (Sandbox Code Playgroud)
此列表将非常大,并且仅用于填充向量和集合(即其内容可以无效).我现在的问题是,如果以下优化是一个好主意:
for (const auto& pair : cachedList)
{
vectorOfFirsts.push_back(std::move(pair.first));
setOfSeconds.insert(std::move(pair.second));
}
Run Code Online (Sandbox Code Playgroud)
调用std :: move on pair.first会以某种方式使pair.second无效吗?这段代码会为循环提供任何加速吗?我知道填充矢量/集而不是列表可能是个好主意,但是列表是通过一些我无法控制/没有时间挖掘的遗留代码来填充的.