c++多线程变量 c++ static 多线程
C 中使用std::thread可直接创建多线程,通过函数、lambda或可调用对象启动线程,支持参数传递(引用需用std::ref),并可用std::mutex和std::lock_guard实现线程同步,保证共享数据安全。

在C中使用std::thread从程序直接创建多线程。 11开始,标准库提供了lt;threadgt;头文件,支持跨平台的多线程编程。下面介绍如何创建线程、传递参数、以及创建简单的线程同步方法。基本线程
要启动一个新线程,只需将函数名或可调用对象生成std::线程构造函数。
示例:#include lt;iostreamgt;#include lt;threadgt;void say_hello() { std::cout lt;lt; quot;来自线程的Hello quot;lt;lt;std::this_thread::get_id() lt;lt; std::endl;}int main() { std::thread t(say_hello); // 启动线程 std::cout lt;lt; quot;主线程运行.quot; lt;lt; std::endl; t.join(); // 等待线程结束 return 0;}登录后复制
说明:
立即进入“豆包AI人工智官网入口”;
立即学习“豆包AI人工智能在线问答入口”;t.join()表示主线程等待子线程执行完毕。如果不调用join()或detach(),程序在线程对象解析构时会调用std::terminate()终止程序。向线程传递参数
可以通过额外注意参数将数据构造为线程函数。:默认是按值传递,若需引用,必须使用std::ref。#include lt;iostreamgt;#include lt;threadgt;void print_number(intamp;n) { n = 10; std::cout lt;lt; quot;Thread: n = quot; lt;lt; n lt;lt; std::endl;}int main() { int num = 5; std::thread t(print_number, std::ref(num)); // 使用 std::ref 传引用 t.join(); std::cout lt;lt; quot;Main: num = quot; lt;lt; num lt;lt; std::endl; // 输出15 return 0;}登录后复制
注意:如果传递指针或值,不需要std::ref;只有引用类型才需要。
豆包AI编程
豆包推出的AI编程助手 483 查看详情 使用lambda表达式创建线程
Lambda让线程代码更灵活,尤其适合短小逻辑。#include lt;iostreamgt;#include lt;threadgt;int main() { auto task = []() { std::cout lt;lt;quot;Lambda 线程运行.quot;lt;lt; std::endl; }; std::thread t(task); t.join(); return 0;}登录后复制线程同步:使用互斥锁(mutex)
多个线程访问共享数据时,需防止竞争条件。常用std::mutex和std::lock_guard保护临界区。#include lt;iostreamgt;#include lt;threadgt;#include lt;mutexgt;std::mutex mtx;int shared_counter = 0;voidincrement() { for (int i = 0; i lt; 100000; i) { std::lock_guardlt;std::mutexgt; lock(mtx); // 自动加锁/解锁共享计数器; }}int main() { std::线程 t1(increment); std::线程 t2(increment); t1.join(); t2.join(); std::cout lt;lt; quot;最终计数器值: quot;lt;lt;shared_counter lt;lt;std::endl;return 0;}登录后复制
说明:
立即进入“豆包AI人工智官网入口”;
立即学习“豆包AI人工智能在线问答入口”;std::lock_guard在重构时加锁,解析构时避免自动释放,死锁。 即使函数提交异常,也能保证锁被释放。
基本上就这些。掌握std::线程、参数传递和std::mutex后,就可以写出基本的安全多线程程序。
实际开发中结合std:atomic、std::condition_variable等工具实现更复杂的同步逻辑。
以上就是c中使用std::线程创建如何多线程程序_c多创建线程与同步实例的详细内容,更多请关注乐哥常识网其他相关文章!大家都在看:edge浏览器无法导入收藏夹怎么办_edge浏览器标注导入失败修复教程Windows10提示“一个或多个音频服务未运行”怎么解决_Windows10服务未运行方法css多列布局与grid结合应用c怎么进行内存对齐_c内存对齐实现方法Poe推出排行榜功能,实时更新AI模型和热门应用受欢迎程度
