Using joinable threads and cancellation mechanisms
The C++11 class std::thread
represents a single thread of execution and allows multiple functions to execute concurrently. However, it has a major inconvenience: you must explicitly invoke the join()
method to wait for the thread to finish execution. This can lead to problems because if an std::thread
object is destroyed while it is still joinable, and then std::terminate()
is called. C++20 provides an improved thread class called std::jthread
(from joinable thread) that automatically calls join()
if the thread is still joinable when the object is destroyed. Moreover, this type supports cancellation through std::stop_source
/std::stop_token
and its destructor also requests the thread to stop before joining. In this recipe, you will learn how to use these new C++20 types.
Getting ready
Before you continue with this, you should read the first recipe of this chapter, Working with threads, to make sure you are familiar with std...