#include <iostream>
#include <mutex>
#include <map>
#include <thread>
using namespace std;
//Global variable
std::mutex mu; //declare a mutex
std::map<std::string, int> threadIDs;
void run(int id) {
std::unique_lock<std::mutex> map_locker(mu);
threadIDs.insert(std::make_pair(std::this_thread::get_id(), id));
map_locker.unlock();
}
int main()
{
std::thread t[5];
for (int i = 0; i < 5; i++) {
t[i] = std::thread(run, i);
}
for (int i = 0; i < 5; i++) {
t[i].join();
}
return 0;
}//end of the code
Hello, I am trying to execute 5 thread running the void run() function and save thread id and int value using std::map. However I get red underline underneath the '.' in threadIDs.insert(std::make_pair(std::this_thread::get_id(), id)); line saying no instance of overloaded function... I guess the error occurs because std::map wants a string and an int inside but I am trying to put std::this_thread::get_id() in the string place. How can I put the thread identity inside the std::map?
Aucun commentaire:
Enregistrer un commentaire