我有一个C ++协议栈dll(用于串行通信),它将类暴露给前端应用程序。暴露的类如下所示:
class ProtocolStack
{
public :
void OpenRequest(Params);
void SendData(Params);
void CloseRequest(Params);
};
ProtocolStack类创建不同的层,如PhysicalLayer,如下所示。
class PhysicalLayer
{
private:
int Baud_rate;
string PortName;
public:
void Send(string);
void Receive();
};
我想使用相同的协议栈来从不同系统并行读取数据。 如果我创建协议栈的单个对象用于并行读取(来自不同的端口),当从不同的线程同时调用相同的函数时,为每个函数调用分配的数据段会不同吗?
它会破坏物理层的私有变量。正确?
我是否需要维护每个层中每个通道的所有数据(并行连接)?
我想平行处理数据。除了创建另一个堆栈对象或维护每层中与连接相关的所有数据之外,还有其他方法吗?
答案 0 :(得分:4)
代码在DLL中的事实并不重要。代码是代码。关于数据共享,如果代码选择这样做,则仅在线程之间共享数据。如果代码使用基于堆栈或分配其自己的基于堆的内存,则不共享数据。如果代码将其数据存储在全局范围内,则在线程之间共享数据。如果代码是由您编写的,或者托管在DLL中的第三方库中,那就是一样的。
问题归结为代码的线程规则。代码可能根本不支持线程使用。只要您遵循某些规则,代码可能支持线程使用。他们唯一可以肯定的是查阅代码的文档,希望其他人实际上记录了他们的线程模型。
在对你提出的问题的评论中:
我的问题是,当同时调用dll中的函数时,是否将为同一对象存储单独的数据属性。
不,他们不会。如果你有两个线程引用同一个对象,那么另一个线程将可以看到由一个线程对该对象的数据进行的修改。