C++11提供了语言级别的多线程,使得多线程编程可移植性提高。使用多线程需要包含头文件#include<thread>
创建线程
要注意线程对象的生命周期要大于线程,这可以用join实现。或者使用detach将线程在后台运行。
#include<iostream>
#include<thread>
#include<chrono>
void f(int n) {
std::cout << "thread create2" << std::endl;
std::cout << "n=" << n << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(3));//获取执行该代码的当前线程
std::cout << "end of t2" << std::endl;
}
int main() {
std::thread t([]{std::cout << "thread create" << std::endl;});
std::cout << t.get_id() << std::endl;//获得当前执行id
t.join();//阻塞主进程,直到线程函数执行结束。
std::thread t2(f, 2);
t2.detach();//放到后台运行
std::cout << std::thread::hardware_concurrency() << std::endl; //获得CPU数
std::cout << t2.get_id() << std::endl;//
std::cout << "end of main" << std::endl;
}
上面的程序中还要注意的是
- 传递参数的方式
- 获取线程信息
- 线程休眠
网友评论