从多个线程调用 c++ dll 中的函数的效果
Effect of calling Functions in c++ dll from multiple threads
我有一个C++协议栈dll(用于串行通信),它将一个类公开给前端应用程序。公开的类如下所示:
class ProtocolStack
{
public :
void OpenRequest(Params);
void SendData(Params);
void CloseRequest(Params);
};
ProtocolStack Class创建不同的层,如PhysicalLayer,如下所示。
class PhysicalLayer
{
private:
int Baud_rate;
string PortName;
public:
void Send(string);
void Receive();
};
我想使用相同的协议栈从不同的系统并行读取数据。如果我创建协议栈的单个对象用于并行读取(从不同的端口),当从不同的线程同时调用相同的函数时,为每个函数调用分配的数据段会不同吗?
它会破坏物理层的私有变量,对吧?
我需要维护每层中每个通道(并行连接)的所有数据吗?
我想并行处理数据。除了创建另一个堆栈对象或维护与每层连接相关的所有数据之外,还有其他方法吗?
代码位于 DLL 中这一事实无关紧要。代码就是代码。关于数据共享,只有在代码选择这样做时,数据才会在线程之间共享。如果代码使用基于堆栈的内存或分配自己的基于堆的内存,则不会共享数据。如果代码将其数据存储在全局范围内,则数据在线程之间共享。如果代码由您编写,或托管在 DLL 中的第三方库中,则情况相同。
这个问题归结为代码的线程规则。该代码可能根本不支持线程用法。代码可能支持线程使用,只要您遵循某些规则即可。他们确定的唯一方法是查阅代码的文档,当然希望其他人确实记录了他们的线程模型。
在对问题的评论中,您说:
我的问题是,当同时调用 dll 中的函数时,是否会为同一对象存储单独的数据属性。
不,他们不会。如果有两个线程引用同一对象,则一个线程对该对象数据的修改将被另一个线程看到。
相关文章:
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- Visual c ++,使用字符串引用/指针调用 dll 函数
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- C++ DLL 引用C++.exe中的函数和类
- 如何使用导出的函数交叉编译 DLL
- 如何在窗口中使用注入的 dll 中的参数调用函数
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 加载由 MATLAB Coder 生成的带有函数的 DLL,该函数调用外部函数
- PowerShell 使用结构类型参数调用 C++ DLL 的导出函数
- 从DLL导出函数,LoadLibrary()需要用TEXT转换的字符串才能编译而不会出错
- 从 C#-DLL 调用函数的 C++ 失败
- 如何在 DLL 内的成员函数中使用互斥/关键节
- 调用 "project" 函数和调用 DLL 函数之间的区别
- 函数指针分配在创建 DLL 后导致错误
- 从动态加载的 dll 内部调用C++函数
- 函数声明中的 WINAPI 标识符C++ DLL 入口点函数中的标识符
- LNK2019某些类函数,但不在其他类函数(DLL 中的模板类)上
- 从库导入函数./ DLL 文件
- 从 ntdll 调用 Nt 函数.dll在 Win32 环境中,C++
- 如何使用ctypes将python列表传递给C函数(dll)