尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

C++并发编程实战:从thread到atomic,面试必考的多线程同步与锁机制全解析

C++并发编程实战:从thread到atomic,面试必考的多线程同步与锁机制全解析 C++并发编程实战:从thread到atomic,面试必考的多线程同步与锁机制全解析引言并发编程是C++程序员的高级技能,也是大厂面试的必考内容。从多线程基础到无锁编程,并发编程涉及众多核心概念。本文将通过大量实战代码,帮你掌握C++并发编程的关键技术,轻松应对面试。一、线程基础1.1 std::thread创建线程#includeiostream#includethread#includevectorvoidworker(intid){std::cout"线程 "id" 开始执行"std::endl;// 模拟工作std::this_thread::sleep_for(std::chrono::milliseconds(100));std::cout"线程 "id" 执行完成"std::endl;}intmain(){std::vectorstd::threadthreads;// 创建5个线程for(inti=0;i5;i++){threads.emplace_back(worker,i+1);}// 等待所有线程完成for(autot:threads){t.join();}std::cout"所有线程已完成"std::endl;return0;}1.2 线程参数传递#includeiostream#includethread#includestringvoidprintMessage(conststd::stringmsg,intcount){for(inti=0;icount;i++){std::coutmsgstd::endl;}}intmain(){// 值传递std::threadt1(printMessage,"Hello",3);// 引用传递(需要用std::ref包装)std::string sharedMsg="Shared Message";std::threadt2([](std::stringmsg){msg="Modified";},std::ref(sharedMsg));t1.join();t2.join();std::coutsharedMsgstd::endl;// 输出: Modifiedreturn0;}1.3 获取线程ID和数量#includeiostream#includethreadintmain(){std::cout"当前线程ID: "std::this_thread::get_id()std::endl;std::cout"硬件并发数: "std::thread::hardware_concurrency()std::endl;std::threadt([](){std::cout"子线程ID: "std::this_thread::get_id()std::endl;});t.join();return0;}二、互斥锁2.1 std::mutex基础#includeiostream#includethread#includemutex#includevectorstd::mutex mtx;intcounter=0;voidincrement(){for(inti=0;i10000;i
返回列表