线程管控
声明
此随笔内容是根据大佬博客进行学习,如想学习,可以访问如下链接。
原文链接:https://www.llfc.club/category?catid=225RaiVNI8pFDD5L4m807g7ZwmF
线程归属权
线程归属于变量管理,即通过std::thread
创建的变量进行管理。
std::thread
C++不允许其执行拷贝构造和拷贝赋值, 所以只能通过移动和局部变量返回的方式将线程变量管理的线程转移给其他变量管理。
C++ 中类似的类型还有std::mutex
, std::ifstream
, std::unique_ptr
可以通过std::move
进行转移
容器存储
容器存储线程时,比如vector,如果用push_back操作势必会调用std::thread,这样会引发编译错误,因为std::thread没有拷贝构造函数。故采用的时emplace方式,可以直接根据线程构造函数需要的参数构造,这样就避免了调用thread的拷贝构造函数。
void use_vector() {
std::vector<std::thread> threads;
for (unsigned i = 0; i < 10; ++i) {
threads.emplace_back(param_function, i);
}
for (auto& entry : threads) {
entry.join();
}
}
std::thread::hardware_concurrency()
是 C++ 标准库中 std::thread 类的一个静态成员函数,用于查询系统支持的线程硬件并发数,即理论上系统能够同时运行的最大线程数。这通常对应于处理器的核心数,包括超线程技术(如 Intel 的超线程技术)提供的逻辑核心。
线程ID
get_id()
可以获取线程的ID
std::thread t([](){
std::cout << "thread start" << std::endl;
});
t.get_id();