c++ - 由类析构函数完成的同步
问题描述
我有关于多线程的问题。我有一个相当大的项目,现在我正在编写一些 exe 客户端来使用所有这些代码。它涉及多线程和进程间通信。我的 main 看起来像这样:
int main(int argc, char** argv)
{
std::unique_ptr<CommunicationWrapper> wrapper;
wrapper = std::make_unique<CommunicationWrapper>(argv[1]);
wrapper->run();
return 0;
}
下面有一个进行进程间通信的类,如下所示:
CommunicationEngine::CommunicationEngine()
: m_processingLoop(std::async(std::launch::async, [this]() { processingLoop(); }))
{}
CommunicationEngine::~CommunicationEngine()
{
m_processingLoop.wait();
}
//some long function that do a lot of stuff based on messages from anothre process
void CommunicationEngine::processingLoop() const
这段代码没有问题,但我想知道在调用析构函数时进行同步(等待)是否被认为是好的做法和好的设计?这种方法可能存在哪些缺陷?
解决方案
RAII通常是一个非常有用的习惯用法,它使您的代码异常安全,并降低了在进一步修改过程中出现错误的风险。
您应该做的主要事情是确保您的析构函数不会抛出。
关于异常安全std::future::wait
- 它的行为在valid() == false
before 之前是未定义的wait()
,所以你应该在 descstructor 中调用它之前检查它。
推荐阅读
- makefile - 使用 CMake 生成 LLVM 字节码
- shell - 使用预定义密码以 root 身份登录并运行用户定义命令的 shell 脚本
- rest - 如何在 Windows 服务器上向公众公开 Flask 本地开发(默认)服务器
- c# - 使用 xdocument 按不区分大小写的属性搜索元素
- dynamics-crm - 在 MS Dynamics 中使用 javascript 获取仪表板名称
- c# - 来自 ApiController 的 Owin 处理程序异常
- python - 在python中绘制具有不同比例值的数据框
- php - 登录 WordPress 后如何将用户重定向到另一个位置?
- ios - 您可以在本地合理保存多少信息?
- objective-c - 在 MacOS 上围绕椭圆 CAShapeLayer 绘制边框