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

pthread多线程程序无法并行、单线程顺序执行问题咨询

问题原因与解决方案

核心原因

你代码中所有同步逻辑都被#ifdef PTHREAD_SYNC条件编译块包裹,编译时未定义该宏的情况下,互斥锁、屏障相关代码不会被编译进程序,线程无任何同步约束,再结合不同设备的CPU调度策略差异,就出现了不同设备运行表现不一致的问题。

具体分析

  • 线程执行逻辑耗时极短:单个线程跑完20次循环仅包含简单的内存读写、打印操作,耗时远小于操作系统分配给线程的默认时间片
  • 不同设备调度策略差异:笔记本CPU通常核心数更多、抢占调度更激进,线程创建后会立刻被调度到不同核心并行执行,就会出现交替运行的预期表现;而台式机/虚拟机若CPU核心数较少、调度策略偏向于让当前线程跑完时间片再切换,就会出现第一个线程执行完所有循环后,第二个线程才开始调度的顺序执行表现
  • 你看到的最终值刚好为40只是巧合:无同步的情况下多线程并发读写共享变量会触发数据竞争,最终值本应小于20*线程数,你当前测试环境下线程完全顺序执行才没触发数据竞争,不代表无同步的代码是正确的

修复方法

编译时加上PTHREAD_SYNC宏定义即可,参考编译命令:

gcc 你的代码文件名.c -o thread_demo -lpthread -DPTHREAD_SYNC

开启宏定义后互斥锁会保证同一时间只有一个线程读写共享变量,屏障会保证所有线程完成20次循环后再打印最终值,不同设备上都能看到线程交替执行的正常表现。


内容的提问来源于stack exchange,提问作者Nathan B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:45:02