#include <iostream>
#include<thread>
#include<string>
#include <unordered_map>
#include <sstream>
//获得线程的id
//获取当前线程的id
void Print() {
std::cout << "进入新线程的id为:" << std::this_thread::get_id() << '\n';
}
void Test1() {
//调用this_thread的静态方法get_id可以查看当前线程的id
std::cout << "主线程的id为:" << std::this_thread::get_id() << '\n';
std::thread t(Print); //创建新线程
t.join();
//调用thread对象的方法get_id()来查看自身的线程id
std::thread t1(Print);
std::cout << "调用新的线程1的id为:" << t1.get_id() << '\n';
std::thread t2(Print);
std::cout << "调用新的线程2的id为:" << t2.get_id() << '\n';
t1.join();
t2.join();
//线程没有关联任何函数,则get_id返回0
std::thread t3;
std::cout << "没有关联函数的线程3的id为:" << t3.get_id() << '\n';
}
//C++标准库中有thread::id 作为键值的哈希映射,故可以使用unordered_map
//用线程id作为哈希键值
std::unordered_map<std::thread::id, std::string>threadDataMap; //哈希映射
void ThreadFunction() {
std::thread::id thread_id = std::this_thread::get_id(); // 获取当前线程的id
//将id转为string类型
std::stringstream ss;
ss << thread_id;
std::string thread_string = ss.str();
threadDataMap[thread_id] = "Thread Data For "+thread_string;
}
//使用哈希表存储线程id和内容
void Test2() {
std::thread t1(ThreadFunction);
t1.join();
std::thread t2(ThreadFunction);
t2.join();
std::thread t3(ThreadFunction);
t3.join();
for (auto& [key, val] : threadDataMap) {
std::cout << "Thread ID = " << key << ", Data = " << val << "\n";
}
}
//用线程id来确定是否是主线程,然后进行操作
std::thread::id master_id; //主线程
void do_some_core_work() {
std::cout << "主线程进行重要的工作!" << "\n";
}
void do_some_common_work() {
std::cout << "其他线程做一些基本的工作!" << "\n";
}
void check() {
if (std::this_thread::get_id() == master_id) { //如果是主线程
do_some_core_work();
}
else { //其他线程
do_some_common_work();
}
}
void Test3() {
master_id = std::this_thread::get_id();
check();
std::thread t1(check);
std::thread t2(check);
t1.join();
t2.join();
}
int main(){
//Test1();
//Test2();
Test3();
}
C++识别线程
最新推荐文章于 2024-07-11 20:53:23 发布