gpt4 book ai didi

c++ - 由类析构函数完成的同步

转载 作者:搜寻专家 更新时间:2023-10-31 02:06:27 26 4
gpt4 key购买 nike

我有关于多线程的问题。我有一个相当大的项目,现在我正在编写一些 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 in general 是一个非常有用的惯用语,它使您的代码异常安全,并降低在进一步修改期间出现错误的风险。

您应该做的主要事情 - 是确保您的析构函数不会抛出。

关于 std::future::wait 的异常安全- 当 wait() 之前的 valid() == false 时,它的行为是未定义的,因此您应该在 descstructor 中调用它之前检查它。

关于c++ - 由类析构函数完成的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50227724/

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