在C++中,可以使用多线程来提高程序的执行效率。多线程程序可以把一个任务拆分成多个子任务,在多个线程中同时处理,从而提高程序的执行效率。在C++中,可以使用std::thread类来创建和管理线程。
1. 创建线程
要创建线程,可以使用std::thread类的构造函数,构造函数有两种形式:
- std::thread t1(函数名);
- std::thread t2(函数名,参数1,参数2,...);
第一种形式用于创建一个线程,线程执行的函数不带参数;第二种形式用于创建一个线程,线程执行的函数带参数。
#include#include // 线程函数,不带参数 void threadFunc1() { std::cout << "threadFunc1" << std::endl; } // 线程函数,带参数 void threadFunc2(int x, int y) { std::cout << "threadFunc2: x + y = " << x + y << std::endl; } int main() { // 创建线程t1,执行threadFunc1函数 std::thread t1(threadFunc1); // 创建线程t2,执行threadFunc2函数,带参数 std::thread t2(threadFunc2, 1, 2); // 等待线程t1和t2结束 t1.join(); t2.join(); return 0; }
2. 管理线程
线程在创建后,可以使用std::thread类的成员函数来管理线程。
- join(): 等待线程结束,等待线程结束后,继续执行主线程。
- detach(): 分离线程,线程结束后,不需要等待,继续执行主线程。
- get_id(): 获取线程id。
- native_handle(): 获取系统线程句柄。
- swap(): 交换两个线程的资源。
还可以使用std::this_thread命名空间中的函数来管理线程。
- sleep_for(): 线程休眠指定时间。
- sleep_until(): 线程休眠到指定时间。
- get_id(): 获取当前线程id。
- yield(): 放弃当前线程资源,让出CPU时间片。
#include#include #include // 线程函数 void threadFunc() { std::cout << "threadFunc: thread id = " << std::this_thread::get_id() << std::endl; std::this_thread::sleep_for(std::chrono::seconds(1)); std::this_thread::yield(); } int main() { std::cout << "main: thread id = " << std::this_thread::get_id() << std::endl; std::thread t(threadFunc); t.join(); return 0; }