c++ - DLL 和应用程序之间的互斥锁共享

标签 c++ multithreading boost dll mutex

我有一个使用我创建的 DLL 的多线程应用程序。如果 DLL 尚未运行某个函数,则某个函数将失败。我如何确保运行此应用程序函数的线程在继续之前等待该 DLL 函数完成?

可视化:

O = DLL 函数完成

T = 应用程序功能开始

应用线程:----------------O---------------------------- -----

DLL线程:--------------------T-------------------- -----

最佳答案

几种方法:

  • 首先想到的是将代码放入 DLLMain() 中,它在应用程序/DLL 加载时自动执行。不过,并不是所有事情都可以在这里完成,比如阻塞操作或需要加载其他 DLL 的操作。如果您尝试这种方法,请务必阅读并理解文档。
  • 第二个想法是 throw 或 assert(),这样 init 函数必须在任何其他函数之前被调用,例如 WSAStartup()。在创建任何其他线程之前,您必须在 main() 中调用一次。这是一个简单的方法。它需要手动工作,并且您不能在全局变量的 ctors 中创建线程(无论如何这总是危险的),但至少它会告诉您是否弄错了,并且假设使用 assert() 方法,发布的开销为零构建。
  • 第三个变体是使用 Boost.Thread 的 One-time Initialization初始化,这似乎做你想做的事。

关于c++ - DLL 和应用程序之间的互斥锁共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18882380/

相关文章:

c++ - C++ 中的原始指针

c# - 'using' block 线程安全吗?

c++ - 如何观看多个QFuture?

c++ - 来自 `boost::asio::streambuf`

c++ - boost mpl序列模式匹配

c++ - 封装在组合类 C++ 中

c++ - 使用节点和复选框创建 TreeView

java - 如何取消从控制台读取输入?

c++ - boost 拆分字符串

c++ - 自定义类的正确构造函数