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

pthread_join引发异常执行顺序,为何后创建的线程1比线程0先输出?

问题原因说明

  • 线程调度无固定先后顺序:pthread_create调用成功仅代表线程已经被加入操作系统的调度队列,具体哪个线程先被CPU分配时间片执行,完全由操作系统的调度策略决定,和你调用pthread_create的先后顺序没有绑定关系。你观察到的idx=1的线程先输出属于正常现象,多次运行可能会出现不一样的顺序。
  • __thread关键字的作用符合预期:你用__thread修饰的var是线程局部存储变量,每个线程会独立持有一份var的副本,所以两个线程的累加过程互不干扰,运行结果里两个线程都输出var从1到10的结果和这个特性吻合。

编译警告修复方案

你遇到的两个编译警告可以通过以下修改解决:

  1. 指针转整数大小不匹配警告:64位系统下指针长度为8字节,int长度为4字节,直接强转可能丢失数据,将int idx = (int)arg;修改为int idx = (long)arg;即可解决。
  2. 非空返回值函数无返回值警告:worker函数声明返回void*类型,在函数末尾添加return NULL;即可。

关于输出间隔的说明

你看到最后一行-----------2----------间隔1秒才输出,是因为主线程在等待pid1执行完成后调用了sleep(1)阻塞1秒,之后才会打印第二个分割线并等待pid2执行完成。


内容的提问来源于stack exchange,提问作者Tom Xue

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 14:15:04