如下图,左边是函数TestThread代码,右边是循环执行TestThread 10次的结果。 我的疑问是: 父线程t1的变量 i 在子线程subT1中使用,父线程t1退出后(执行完空闲了),变量 i 在子线程中仍然正常使用,为什么?是因为作用域吗? 每个线程都有自己的堆栈,变量 i 是怎么存储的?
subt1捕获了i这个变量, 变成了类似代码 class t1{ state; i; } class subt1{ t1 t1instance; work(){} }
有没有关于这方面介绍的文章(博客)推荐一下
@东汉: https://www.cnblogs.com/instance/archive/2011/05/22/2053541.html
https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions#capture-of-outer-variables-and-variable-scope-in-lambda-expressions
@czd890: 推荐的博客很好,谢谢。原来是把捕获的变量封装到类里,那么捕获的变量如果是值类型(存储从栈变成了堆了)就很好处理了,好狡猾,666。