Ежедневный бит (e) C++ # 8, новый стандартный поток: std::jthread
В C++20 мы получили новую версию стандартного потока в виде std::jthread
(присоединяющийся поток).
С std::thread
удерживаемый поток должен быть присоединен или отсоединен до того, как переменная будет уничтожена (иначе программа завершится).
std::jthread
решает эту проблему, автоматически присоединяясь к деструктору, устраняя необходимость в обертках.
#include <chrono> #include <thread> { // Spawn a thread: auto t = std::thread([]{ using namespace std::chrono_literals; std::this_thread::sleep_for(1s); }); // Required join, will block until 1s sleep finishes. t.join(); } // end of scope, t is destroyed { // Spawn a thread: auto t = std::jthread([]{ using namespace std::chrono_literals; std::this_thread::sleep_for(1s); }); } // end of scope, t is destroyed // and the thread is joined as part of that // Start a thread and immediately join, // as the temporary return value is destroyed. std::jthread([]{}); // Start a thread and (very likely) immediately terminate, // as the temporary return value is destroyed. std::thread([]{});
Откройте этот пример в Compiler Explorer.