gpt4 book ai didi

c++ - std::thread(可分离)和异常安全

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

通常的做法是使用守卫、RAII 和 try/catch block 来确保在所有情况下最终都会加入线程。但是,要分离的线程呢?

void aFunction() {
std::thread t {someOtherFunction}; // someOtherFunction may throw!!!
t.detach;
}

我是否应该使用一些异常处理机制来确保 t 即使在异常情况下也能正确分离,或者这真的不重要吗?

最佳答案

std::thread t {someOtherFunction}; // someOtherFunction may throw!!

如果 someOtherFunction 可以抛出异常,则需要在该函数中处理异常。否则,默认行为是在异常“逃逸”线程函数时调用 std::terminate

std::thread 对象构造和std::thread::detach 本身也可以抛出,所以这些异常需要由aFunction 处理()

detach()如果线程对象不可连接,则方法抛出。因此,如果您希望避免处理此异常,您可以添加一个测试以在尝试分离线程之前查看该线程是否可连接。

if (t.joinable())
t.detach;

你被称为 detach() 的事实表明你不希望在稍后阶段“加入”(同步)线程,它基本上会自行处理。

与大多数异常处理问题一样,您将如何处理抛出的异常?如果无法处理异常,则要么不捕获它,要么捕获它、记录它并重新抛出它(或调用 std::terminate)。

关于c++ - std::thread(可分离)和异常安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35150629/

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