Gor*_*r H 4 c# multithreading for-loop
我对正确的线程相对绿色,我有这个,它是为了简单而修改但它基本上是相同的东西:
//Global:
N=2
bool[] mySwitches;
//In my main:
mySwitches = new bool[N];
for (int i = 0; i < N; i++)
{
ThreadList.Add(new Thread(() => Worker(i)));
ThreadList[i].Start();
}
//Outside of main:
Private Void Worker(int num)
{
while(true)
{
if (mySwitches[num]) //error happes here because num is equal to N, how?
{
//do something
}
}
}
Run Code Online (Sandbox Code Playgroud)
如上所示,工作线程以某种方式得到num = N的值,我希望它只能达到N-1.我知道在创建Worker之后我会增加,是不是以某种方式通过引用而不是值传递?
我尝试通过在while循环之前进行测试来修复问题,如果num = N则返回,但即使使用此规定,我也会得到相同的错误.这让我相信在线程启动后,num会以某种方式递增.
我通过在ThreadList [i] .Start()之后直接放置Sleep(20)来解决这个问题,但我真的不喜欢使用Sleep,很明显我不知道这个线程场景是如何工作的.
任何人都可以对此有所了解吗?
i被其参考所捕获.将您的代码更改为
for (int i = 0; i < N; i++)
{
var thInx = i;
ThreadList.Add(new Thread(() => Worker(thInx)));
ThreadList[thInx].Start();
}
Run Code Online (Sandbox Code Playgroud)
欲了解更多信息:http://csharpindepth.com/articles/chapter5/closures.aspx
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |