【问题标题】:How can I make a C++ DLL thread safe? [closed]如何使 C++ DLL 线程安全? [关闭]
【发布时间】:2021-08-12 10:28:44
【问题描述】:

我有 C++ DLL,它合并图像,我正在从 C# 传递这个 DLL 的参数。

[DllImport("Image.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int ImageMerge(ref IntPtr ImagesData, ref IntPtr[] ImageParams, ref IntPtr ImageProgress);

在这里,我需要使我的 DLL 线程安全,我不知道该怎么做。有没有有效的方法?

【问题讨论】:

  • 你写了dll的代码吗?是否只对传入的数据有效?
  • @RetiredNinja 不,我没有编写 dll 代码。是的,它适用于传递的数据。
  • 如果您没有编写 DLL 或无法访问代码,您希望如何使其成为线程安全的?或者你想简单地让它一次只有一个线程可以从 C# 应用程序调用该方法?如果是这样,只需拨打lock
  • @Andy 我没有编写 DLL,但我可以访问 DLL 代码,并且在 DLL 内部,创建了一个对象以在合并图像时访问其他方法和属性。
  • 如果没有人可以看到它,任何人将如何帮助您使 DLL 代码线程安全?

标签: c# c++ multithreading dll thread-safety


【解决方案1】:

使静态方法线程安全的最简单方法是确保它们永远不会写入任何类型的全局状态。 IE。只使用局部变量,并确保任何被调用的方法也是线程安全的。如果需要某种全局状态,例如内存池,则所有对其的访问都应通过锁定来保护。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多