Multithreading 如何在c++;11

Multithreading 如何在c++;11,multithreading,c++11,termination,Multithreading,C++11,Termination,各位好,, 我在c++11中使用多线程。我想建立一种机制,它将跟踪所有正在运行和终止的线程。如果任何线程被终止,它将自动创建终止的线程。有人知道如何在c++11中实现这一点吗?非常感谢您的光临。编写代码的常见模式是将代码包装在循环中并尝试块,这样可以避免异常: for(;;) { try { // Your code here } catch (const std::exception& e) { // Log exception

各位好,,
我在c++11中使用多线程。我想建立一种机制,它将跟踪所有正在运行和终止的线程。如果任何线程被终止,它将自动创建终止的线程。有人知道如何在c++11中实现这一点吗?非常感谢您的光临。

编写代码的常见模式是将代码包装在循环中并尝试块,这样可以避免异常:

for(;;) {
    try {
        // Your code here
    } catch (const std::exception& e) {
        // Log exception
    } catch (...) {
        // Log unknown exception
    }
}
这在服务器中很常见:若服务用户请求失败,则记录它,断开当前连接并尝试服务下一个连接。当然,有可能发生一些非常糟糕的事情,所有进一步的尝试都将失败。所以你必须小心不要让你的电脑过载,因为无限循环会一次又一次地尝试


您可以将此循环放入线程中,以便在发生某些事情时不会崩溃,或者,您可以使用
std::future
而不是直接使用线程,并将future.get()代码放入此循环中

我假设您将加入终止的线程?一个简单的解决方案就是一个原子布尔标志,线程在退出之前设置它最后做的事情。主线程轮询此标志,如果已设置,则加入线程。若要添加@Someprogrammerdude注释,请注意,某些线程库(例如pthreads)提供了一个附加的非阻塞连接,从而消除了在加入线程之前轮询线程状态的问题。它可能效率较低,但应该会导致更干净的设计。谢谢你的重播@Someprogrammerdude。我以前从未使用过原子旗。在我的程序中,我应该在哪里添加这个布尔标志?在“如果任何线程被终止,那么它将自动创建终止的线程”下,你是什么意思?是否要实现线程池?在这种情况下,您不需要终止任何线程。@AlexeyGuseynov如果任何线程意外终止,它将装入终止的线程。例如,如果我的一个线程正在根据用户输入计算两个数字的除数,并且如果用户将除数输入为0,则线程被终止。我想创建一个机制,在其中重新创建这个终止的线程。