gpt4 book ai didi

c++ - std::thread::join 何时会因 no_such_process 而失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:50:20 27 4
gpt4 key购买 nike

std::thread::join()允许失败,如果线程“无效”,则为 no_such_process 抛出 std::system_error。请注意,no_such_process 情况不同于不可连接的线程(错误代码为 invalid_argument)。

在什么情况下会发生这种情况?或者,我必须怎么做才能确保 join() 不会因此而失败?我想要一个析构函数 join() 它管理的一些线程,当然我希望析构函数永远不会抛出异常。什么可以使(正确构造且未被破坏的)线程“无效”。

最佳答案

In what circumstances might that happen?

在 *nix 系统上,当您尝试加入 ID 不在线程表中的线程时会发生这种情况,这意味着线程不存在(不再存在)。当线程已经加入并终止时,或者线程变量的内存已损坏时,可能会发生这种情况。

Alternatively, what must I do to ensure that join() does not fail for that reason?

您可能会测试 std::thread::joinable(),但它也可能会失败1。只是不要弄乱您的线程变量,您就可以开始了。简单地忽略这种可能性,如果你遇到这样的错误你的程序更好的核心转储并让你分析错误。


<子>1) fail 是指报告 true 而不是 false 或相反,不是抛出或崩溃.

关于c++ - std::thread::join 何时会因 no_such_process 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49944980/

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