#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
保存线程ID和std::map
的值。但是我在'。'下方有红色下划线。在threadIDs.insert(std::make_pair(std::this_thread::get_id(), id));
行中说没有重载函数的实例...
我猜会发生错误,因为std::map
想要一个string
和一个int
,但是我试图将std::this_thread::get_id()
放在字符串位置。如何将线程标识放入std::map
内?
答案 0 :(得分:1)
std::this_thread::get_id
返回<class '__main__.Bar'>
()
{}
,与std::thread::id
不同。您的地图应存储std::string
作为其键类型。