0

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

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

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

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

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

4

1 回答 1

4

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

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


在对您说的问题的评论中:

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

不,他们不会。如果您有两个线程引用同一个对象,则一个线程对该对象数据的修改将对另一个线程可见。

于 2013-11-06T07:39:51.423 回答