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

C++线程疑问:线程函数内的函数调用是否归属该线程?

问题解答

一、method2()和method3()的执行线程

  • 肯定的,method1()在你创建的独立线程tmethod1里运行,那它内部调用的method2()和method3()百分百在同一个独立线程里执行。
  • 函数调用是当前线程执行流的一部分,method1()的整个执行逻辑都在tmethod1线程的上下文里,不会给内部的函数调用单独开新线程。

另外提个代码里的坑:

你创建线程时传的obj是值拷贝,线程里会生成一个One的副本,不是main里的原对象。要是想操作原对象,得传引用(用std::ref(obj)包装)或者指针:

std::thread tmethod1(&One::method1, std::ref(obj));
// 或者用指针
std::thread tmethod1(&One::method1, &obj);

二、detach后线程能否在main结束后继续运行

  • 不行。当main线程跑完,整个进程直接终止,进程里所有线程(包括已经detach的)都会被操作系统强制叫停,不管任务有没有做完。
  • std::thread::detach()只是让线程和std::thread对象解绑,不用再调用join()等它,但改变不了进程终止时销毁所有线程的规则。
  • 要是想让线程的任务完整执行,要么在main结束前调用tmethod1.join()等它做完,要么搞个后台进程的架构(这得靠操作系统的进程管理,不是C++标准库能搞定的)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:24:58