c++多线程实现的四种方式
作者:野牛程序员:2023-07-17 20:31:53 C++阅读 2757
在C++中,你可以使用不同的方式来实现多线程。以下是四种常见的方式:
使用std::thread类:C++11引入了std::thread类,它是一个用于创建和管理线程的标准库类。你可以通过创建std::thread对象并将函数作为参数传递给它来启动新的线程。例如:
#include <iostream>
#include <thread>
void myFunction()
{
// 线程的代码逻辑
std::cout << "Hello from thread!" << std::endl;
}
int main()
{
std::thread t(myFunction); // 创建线程对象,并将函数作为参数传递
t.join(); // 等待线程执行完毕
return 0;
}使用函数指针:你可以使用函数指针来启动一个线程,类似于第一种方法。例如:
#include <iostream>
#include <thread>
void myFunction()
{
// 线程的代码逻辑
std::cout << "Hello from thread!" << std::endl;
}
int main()
{
std::thread t(&myFunction); // 创建线程对象,并将函数指针作为参数传递
t.join(); // 等待线程执行完毕
return 0;
}使用函数对象:你可以使用函数对象(也称为函数符)来实现多线程。函数对象是一个类对象,可以像函数一样调用。例如:
#include <iostream>
#include <thread>
class MyFunctor
{
public:
void operator()() const
{
// 线程的代码逻辑
std::cout << "Hello from thread!" << std::endl;
}
};
int main()
{
MyFunctor functor;
std::thread t(functor); // 创建线程对象,并将函数对象作为参数传递
t.join(); // 等待线程执行完毕
return 0;
}使用lambda表达式:C++11引入的lambda表达式使得在线程创建中变得更加方便。你可以直接在std::thread构造函数中使用lambda表达式。例如:
#include <iostream>
#include <thread>
int main()
{
std::thread t([]() {
// 线程的代码逻辑
std::cout << "Hello from thread!" << std::endl;
}); // 创建线程对象,并在lambda表达式中定义线程的代码逻辑
t.join(); // 等待线程执行完毕
return 0;
}这些方法中的每一种都有其适用的场景和用法。可以根据具体的需求选择最合适的方式来实现多线程。请注意,无论使用哪种方式,都需要调用join()或detach()函数来等待线程执行完毕或分离线程。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

