I want to know when using a lambda expression to define the thread, will it help to improve some performance gain. In my case, I have to run several threads. This is for real-time based application. Hence, if someone suggests to me what would be the optimal way of creating several threads. Creating threads happens in each iteration in the actual codebase. This is an example of what is happening in one iteration in high-level. Thus, this is a kind of expensive operation which is to be optimized.
#include <iostream>
#include <thread>
#include <vector>
#include <algorithm>
class Task
{
public:
void execute(std::string command)
{
//TODO actual logic
for(int i = 0; i < 5; i++)
{
std::cout<<command<<std::endl;
}
}
};
int main()
{
Task* taskPtr = new Task();
std::vector<std::thread> workers_older;
for (int i = 0; i < 2; i++) {
workers_older.push_back(std::thread(&Task::execute, taskPtr, "Task: without lambda expression"+ std::to_string(i)));
}
std::for_each(workers_older.begin(), workers_older.end(), [](std::thread &t)
{
t.join();
});
std::vector<std::thread> workers;
for (int i = 0; i < 2; i++) {
workers.push_back(std::thread([&]()
{
taskPtr->execute("Task: "+ std::to_string(i));
}));
}
std::for_each(workers.begin(), workers.end(), [](std::thread &t)
{
t.join();
});
return 0;
}
EDIT: After the valuable comments about what is to be done, I have provided as an answer as they suggested