【发布时间】:2018-02-16 18:53:03
【问题描述】:
我有一个不断处理数据的后台工作线程。
(使用std::thread 创建)
如果线程用完了要处理的数据,则线程被设计为等待 - 然后在 mote 数据可用于处理时恢复。
(使用std::condition_variable)
如果此线程意外终止,我想确保线程以全新状态重新启动。
但我不知道如何检测线程终止或对其做出反应。
处理这种情况的最佳方法是什么?
【问题讨论】:
-
你可以有一个at exit handler。
-
有办法检测吗?是的。您可以
std::join将阻塞直到它返回的线程(然后您可以重新创建它)。您可以密切关注当前进程存在哪些线程 ID,如果您的工作线程 ID 消失,您可以重新生成它。还有其他选择。基本上你的问题的答案是“是”。 -
为什么会出乎意料?修复导致它终止的任何东西。
-
@MartinJames 这是一种预防措施,而不是错误修复。我试图将其设计为在不崩溃的情况下处理意外情况,而不是假设我可以预测可能发生的一切。
-
@JesperJuhl 谢谢。当然,加入线程是可行的——但它也违背了多线程的目的。我希望这个线程在后台继续处理,并且我不希望任何其他线程在不需要时等待它。观察线程 ID 是一个有趣的想法,我将不得不对此进行研究。 tadman 提到,使用
thread_local存储可能是最流畅的解决方案
标签: c++ multithreading exception exception-handling