C++多线程编程通过std::thread实现,支持函数、Lambda创建线程,可传值或引用参数,需调用join()或detach()管理线程生命周期,并可使用hardware_concurrency()获取硬件并发数。

C++ 实现多线程编程主要通过标准库中的 std::thread 来完成。从 C++11 开始,C++ 标准提供了对多线程的原生支持,使得开发者无需依赖第三方库(如 pthread)也能轻松编写跨平台的多线程程序。
创建和启动线程
使用 std::thread 可以通过函数、函数对象、Lambda 表达式等方式创建线程。
基本语法:
- 包含头文件:
#include - 构造一个 thread 对象并传入可调用目标
#include示例2:使用 Lambda 表达式#include void say_hello() { std::cout << "Hello from thread!" << std::endl; } int main() { std::thread t(say_hello); // 启动新线程执行 say_hello t.join(); // 等待线程结束 return 0; }
#include#include int main() { std::thread t([](){ std::cout << "Lambda in thread" << std::endl; }); t.join(); return 0; }
传递参数给线程函数
向线程函数传递参数时,需在构造 thread 对象时一并传入。注意:默认是值传递,若要引用传递,必须使用 std::ref。
立即学习“C++免费学习笔记(深入)”;
示例:传参与引用传递#include#include void print_num(int n, std::string& msg) { n += 10; msg += " (modified)"; std::cout << "n = " << n << ", msg = " << msg << std::endl; } int main() { int val = 5; std::string str = "Hello"; std::thread t(print_num, val, std::ref(str)); // 引用传递 str t.join(); std::cout << "After thread: val = " << val << ", str = " << str << std::endl; return 0; }
输出中可以看到,val 的修改在线程内无效(值传递),而 str 被修改了(引用传递)。
请注意以下说明:1、本程序允许任何人免费使用。2、本程序采用PHP+MYSQL架构编写。并且经过ZEND加密,所以运行环境需要有ZEND引擎支持。3、需要售后服务的,请与本作者联系,联系方式见下方。4、本程序还可以与您的网站想整合,可以实现用户在线服务功能,可以让客户管理自己的信息,可以查询自己的订单状况。以及返点信息等相关客户利益的信息。这个功能可提高客户的向心度。安装方法:1、解压本系统,放在
线程的等待与分离
每个 thread 对象有两种运行模式:
- join():主线程等待该线程执行完毕
- detach():线程与主线程分离,独立运行(后台运行)
必须在 thread 对象销毁前调用其中之一,否则程序会终止(调用 std::terminate)。
示例:分离线程#include#include #include void background_task() { std::this_thread::sleep_for(std::chrono::seconds(2)); std::cout << "Background task done." << std::endl; } int main() { std::thread t(background_task); t.detach(); // 分离线程 std::cout << "Main thread continues..." << std::endl; std::this_thread::sleep_for(std::chrono::seconds(3)); // 确保主线程不立即退出 return 0; }
获取硬件支持的并发线程数
可以使用 std::thread::hardware_concurrency() 查询系统建议的最大并发线程数。
unsigned int max_threads = std::thread::hardware_concurrency(); std::cout << "Supports " << max_threads << " concurrent threads.\n";
这个值只是一个提示,可能返回 0(表示无法确定)。
基本上就这些。掌握 std::thread 的创建、参数传递、生命周期管理,就能应对大多数基础多线程场景。实际开发中常配合 mutex、条件变量等同步机制使用,避免数据竞争。










