The std::jthread
class in C++ provides a convenient way to create and manage threads. Unlike the traditional std::thread
, std::jthread
is destructible and joins its associated thread automatically when the object goes out of scope.
In addition to managing the thread lifecycle, std::jthread
also allows passing arguments to the thread function during the thread creation process. This enables you to pass data or parameters to the thread function, making it more flexible and versatile.
Here’s an example that demonstrates how to pass arguments to a std::jthread
:
#include <iostream>
#include <thread>
void threadFunction(int arg1, const std::string& arg2) {
std::cout << "Thread function called with arguments: " << arg1 << ", " << arg2 << std::endl;
// Perform thread work here
}
int main() {
int value = 42;
std::string message = "Hello, world!";
std::jthread myThread(threadFunction, value, message);
// Thread created with arguments, do other work here
return 0;
}
In the above example, the threadFunction
takes two arguments: an integer arg1
and a constant reference to a string arg2
. Inside the main
function, we create a std::jthread
object named myThread
and pass the threadFunction
as the first argument, followed by the required arguments value
and message
.
When the myThread
object is constructed, it automatically launches the thread and invokes the threadFunction
with the provided arguments. In this case, the threadFunction
will print Thread function called with arguments: 42, Hello, world!
to the console.
You can pass any number of arguments to the std::jthread
constructor, depending on the requirements of your thread function. Simply list the arguments after the thread function pointer or lambda, separated by commas.
By passing arguments to a std::jthread
, you can easily provide data or configuration parameters to your thread function, making it more dynamic and adaptable to different scenarios.
#threading #C++