#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
Здравствуйте, я пытаюсь выполнить 5 потоков, выполняющих функцию void run()
, и сохранить идентификатор потока и значение int
, используя std::map
.Тем не менее, я получаю красное подчеркивание под «.»в строке threadIDs.insert(std::make_pair(std::this_thread::get_id(), id));
говорится, что экземпляр перегруженной функции отсутствует ... Я предполагаю, что ошибка возникает из-за того, что std::map
хочет внутри string
и int
, но я пытаюсь поместить std::this_thread::get_id()
в строку.Как я могу поместить идентификатор потока в std::map
?