https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94996
Bug ID: 94996 Summary: jthread should stop and join the associated thread before being assigned. Product: gcc Version: 10.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: hotwatermorning at gmail dot com Target Milestone: --- Hi, A joinable std::jthread should stop and join the associated thread before being assigned, but it seems that current implementation doesn't. c.f. https://eel.is/c++draft/thread.jthread.class#thread.jthread.cons-13 c.f. https://github.com/josuttis/jthread/pull/35 Step to reproduce: Build and run this code snippet with gcc-10.1 with `-std=c++20` option. #include <cassert> #include <iostream> #include <thread> #include <chrono> int main() { std::cout << "Start a thread." << std::endl; std::jthread th([](std::stop_token st) { for( ; st.stop_requested() == false; ) { std::cout << "." << std::flush; std::this_thread::sleep_for(std::chrono::milliseconds(300)); } }); std::stop_token st = th.get_stop_token(); std::this_thread::sleep_for(std::chrono::milliseconds(3000)); th = std::jthread(); // `th` should stop and join the associated thread before being assigned. assert(st.stop_requested()); std::cout << "Finished." << std::endl; }