gpt4 book ai didi

c++ - 从 dll 导入的类的线程安全

转载 作者:行者123 更新时间:2023-11-30 04:32:56 27 4
gpt4 key购买 nike

我有一个导出接口(interface)的dll

class Qwe{
virtual void a() = 0;
virtual void b() = 0;
};

extern "C" Qwe* createQwe();

我将它加载到我的程序中并创建多个 Qwe 对象。问题是从不同线程访问这些对象是否安全?我应该为每个对象打开新的库实例,还是一个就足够了?

没有使用静态数据成员,库函数本身不是线程安全的。

为了更好地定义问题...导出的类可能如下所示

class QweImpl : public Qwe{
public:
virtual void a() {
std::fill(data.begin(), data.end(), 1.0)};
private:
std::vector<double> data; };

QweImpl::a() 在这里安全吗?从某种意义上说,两个不同的 QweImpl 对象可以同时调用它们的 a() 函数?

最佳答案

在 Windows 中,您只能加载一次库。进一步尝试加载库只会增加引用计数器。因此,“为每个对象加载一个库”是行不通的。

如果您的 Qwe 类包含数据成员或字段(我不知道它是否包含),那么您可以使用 Qwe 内部的关键部分(或其他一些机制)来保护对共享内存的访问。

关于c++ - 从 dll 导入的类的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7336488/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com