从多个线程调用c ++ dll函数的效果

时间:2013-11-06 07:23:09

标签: c++ multithreading dll

我有一个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();
 };

我想使用相同的协议栈来从不同系统并行读取数据。 如果我创建协议栈的单个对象用于并行读取(来自不同的端口),当从不同的线程同时调用相同的函数时,为每个函数调用分配的数据段会不同吗?

它会破坏物理层的私有变量。正确?

我是否需要维护每个层中每个通道的所有数据(并行连接)?

我想平行处理数据。除了创建另一个堆栈对象或维护每层中与连接​​相关的所有数据之外,还有其他方法吗?

1 个答案:

答案 0 :(得分:4)

代码在DLL中的事实并不重要。代码是代码。关于数据共享,如果代码选择这样做,则仅在线程之间共享数据。如果代码使用基于堆栈或分配其自己的基于堆的内存,则不共享数据。如果代码将其数据存储在全局范围内,则在线程之间共享数据。如果代码是由您编写的,或者托管在DLL中的第三方库中,那就是一样的。

问题归结为代码的线程规则。代码可能根本不支持线程使用。只要您遵循某些规则,代码可能支持线程使用。他们唯一可以肯定的是查阅代码的文档,希望其他人实际上记录了他们的线程模型。


在对你提出的问题的评论中:

  

我的问题是,当同时调用dll中的函数时,是否将为同一对象存储单独的数据属性。

不,他们不会。如果你有两个线程引用同一个对象,那么另一个线程将可以看到由一个线程对该对象的数据进行的修改。