在C++中实现多线程编程,需要创建线程,可以使用C++标准库中的std::thread
来实现。
1. 创建线程
std::thread构造函数的第一个参数是一个函数指针,或者是一个函数对象,它指向要运行在新线程上的函数,可以使用以下几种方式来创建线程:
- 传入一个函数指针:
std::thread t1(func);
- 传入一个函数对象:
std::thread t2(FuncObject());
- 传入一个lambda表达式:
std::thread t3([](){ std::cout << "Hello from thread" << std::endl; });
- 传入一个类的成员函数:
std::thread t4(&Class::memberFunc, this);
- 传入一个类的静态成员函数:
std::thread t5(&Class::staticMemberFunc);
2. 启动线程
创建线程后,可以使用std::thread::join()
函数来启动线程,该函数会阻塞当前线程,直到新线程执行完毕:
t1.join();
3. 终止线程
如果需要在线程运行期间终止线程,可以使用std::thread::detach()
函数,该函数会让线程运行在后台,不会阻塞当前线程:
t1.detach();
4. 等待线程结束
如果需要等待线程结束,可以使用std::thread::joinable()
函数来检查线程是否可以被等待,如果可以,可以使用std::thread::join()
函数来等待线程结束:
if(t1.joinable()) t1.join();
5. 使用线程组
如果需要同时创建多个线程,可以使用std::thread_group
类,该类可以帮助我们管理多个线程,可以使用以下几种方式来创建线程组:
- 传入一个函数指针:
std::thread_group tg; tg.create_thread(func);
- 传入一个函数对象:
std::thread_group tg; tg.create_thread(FuncObject());
- 传入一个lambda表达式:
std::thread_group tg; tg.create_thread([](){ std::cout << "Hello from thread" << std::endl; });
- 传入一个类的成员函数:
std::thread_group tg; tg.create_thread(&Class::memberFunc, this);
- 传入一个类的静态成员函数:
std::thread_group tg; tg.create_thread(&Class::staticMemberFunc);
6. 等待线程组结束
如果需要等待线程组中的所有线程结束,可以使用std::thread_group::join_all()
函数来等待线程组中的所有线程结束:
tg.join_all();
以上就是在C++中实现多线程编程的一些基本操作,通过使用std::thread
和std::thread_group
,可以轻松实现C++多线程编程。