首页 新闻 会员 周边

c# 父线程变量i在子线程中使用,父线程退出后,变量i在子线程中仍然正常,是什么原因?

0
悬赏园豆:10 [已解决问题] 解决于 2020-05-29 20:14

如下图,左边是函数TestThread代码,右边是循环执行TestThread 10次的结果。
我的疑问是:
父线程t1的变量 i 在子线程subT1中使用,父线程t1退出后(执行完空闲了),变量 i 在子线程中仍然正常使用,为什么?是因为作用域吗?
每个线程都有自己的堆栈,变量 i 是怎么存储的?

东汉的主页 东汉 | 初学一级 | 园豆:195
提问于:2020-05-28 21:43
< >
分享
最佳答案
1

subt1捕获了i这个变量, 变成了类似代码
class t1{
state;
i;
}
class subt1{
t1 t1instance;
work(){}
}

收获园豆:10
czd890 | 专家六级 |园豆:14412 | 2020-05-28 22:22

有没有关于这方面介绍的文章(博客)推荐一下

东汉 | 园豆:195 (初学一级) | 2020-05-28 22:51

@czd890: 推荐的博客很好,谢谢。原来是把捕获的变量封装到类里,那么捕获的变量如果是值类型(存储从栈变成了堆了)就很好处理了,好狡猾,666。

东汉 | 园豆:195 (初学一级) | 2020-05-29 20:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册