A-S*_*ani 3 c# parallel-processing multithreading
考虑以下代码:
for(int i = 0; i < 10; i ++)
{
new Thread(() => Test(i)).Start();
}
Run Code Online (Sandbox Code Playgroud)
该Test(int i)函数:
public void Test(int i)
{
Console.WriteLine("=== Test " + i);
}
Run Code Online (Sandbox Code Playgroud)
实际输出:
===测试3
===测试4
===测试4
===测试5
===测试5
===测试5
===测试9
===测试9
===测试9
===测试10
你可以看到一些数字丢失了,其他一些数据被复制了.
预期产量:
我希望以随机顺序看到所有数字.
题
我应该锁定任何变量/方法吗?我怎样才能解决这个问题?
我应该锁定任何变量/方法吗?我怎样才能解决这个问题?
你的问题是封闭和捕获的变量
将您的代码更改为
for(int i = 0; i < 10; i ++)
{
int tmp = i;
new Thread(() => Test(tmp)).Start();
}
Run Code Online (Sandbox Code Playgroud)
欲了解更多信息:http://csharpindepth.com/articles/chapter5/closures.aspx或 http://geekswithblogs.net/rajeevr/archive/2012/02/26/closures-and-captured-variable.aspx
| 归档时间: |
|
| 查看次数: |
1343 次 |
| 最近记录: |