You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mutex与线程并行理念的冲突:单多线程性能对比及概念疑问

问题解答与概念纠正

先修正代码中的错误

你的代码里main函数最后一行cout<<addMoney<<endl;是输出addMoney函数的内存地址,而不是变量myAmount的值,正确写法应该是:

cout << myAmount << endl;

单线程 vs 多线程版本的运行速度

单线程版本运行更快。原因如下:

  • 多线程版本需要额外开销:线程的创建、销毁,以及操作系统对线程的调度切换成本。
  • 由于mutex的存在,两个线程的addMoney执行完全串行,没有任何并行执行的收益,反而多了加锁、解锁的额外开销。
  • 单线程版本直接连续执行两次自增操作,没有上述额外成本,自然更快。

概念错误纠正

  • 线程的核心价值不只是并行处理:线程的本质是实现并发,并行只是并发在多核CPU上的一种表现形式。单核CPU上多线程是通过时间片轮转实现并发(看起来同时运行),只有多核CPU上才可能真正并行。而且多线程的优势更多体现在I/O密集型任务(比如等待磁盘、网络响应时,其他线程可以继续工作),或者计算密集型任务中能拆分出无锁/低锁的并行子任务时。
  • 不是所有多线程场景都能提升性能:如果多线程的任务大部分时间都在竞争同一个锁(比如这个例子里,整个任务都在临界区内),那么多线程会退化成串行执行,还会增加线程调度和锁的开销,反而比单线程慢。
  • mutex的作用是保护共享资源,而非强制串行:mutex的目的是避免多个线程同时操作共享资源导致的竞态条件,但如果你的任务本身无法拆分出并行的部分,强行用多线程+mutex完全是画蛇添足。

内容的提问来源于stack exchange,提问作者Navyansh Mahla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 04:40:52