C# Autoresetevent和++;我
这个代码片段非常清楚,问题也很简单:为什么cnt不等于0 此代码显示:C# Autoresetevent和++;我,c#,autoresetevent,C#,Autoresetevent,这个代码片段非常清楚,问题也很简单:为什么cnt不等于0 此代码显示: t1是生产者,加上i t2是消费者,eat i,设置一个int数组 在我看来,当t1加i时,它会等待t2消耗它。t2设置阵列后,通知t1继续运行 我知道t2可能每I跑两次甚至更多。但我认为这没关系。请告诉我怎么了 结果如下: min: 22, count: 1059, 0.00100994206423003 data[311106]: 0 data[311111]: 0 data[311516]: 0 data[312
- t1是生产者,加上i
- t2是消费者,eat i,设置一个int数组
min: 22, count: 1059, 0.00100994206423003
data[311106]: 0
data[311111]: 0
data[311516]: 0
data[312153]: 0
data[312801]: 0
data[312873]: 312874
data[313223]: 0
data[313276]: 0
data[313400]: 0
data[315358]: 0
data[317888]: 0
AutoResetEvent m1=新的AutoResetEvent(假);
int i=0;
int[]数据=新的int[0x100000];
任务t1=任务。运行(()=>
{
控制台写入线(“t1运行”);
而(i<0x0fffff)
{
m1.WaitOne();
++一,;
}
控制台写入线(“t1完成”);
});
任务t2=任务。运行(()=>
{
控制台写入线(“t2运行”);
而(i<0x0fffff)
{
数据[i]=i;
m1.Set();
}
控制台写入线(“t2完成”);
});
Task.WaitAll(t1,t2);
int-cnt=0;
int min=0x0fffff;
对于(int j=0;j<0x0fffff;++j)
{
如果(数据[j]!=j)
{
min=数学min(min,j);
cnt++;
WriteLine($“data[{j}]:{data[j]}”);
}
}
WriteLine($“min:{min},count:{cnt},{cnt*1.0/0x0fffff}”);
为什么cnt不等于0
AutoResetEvent m1 = new AutoResetEvent(false);
int i = 0;
int[] data = new int[0x100000];
Task t1 = Task.Run(() =>
{
Console.WriteLine("t1 run");
while (i < 0x0fffff)
{
m1.WaitOne();
++i;
}
Console.WriteLine("t1 done");
});
Task t2 = Task.Run(() =>
{
Console.WriteLine("t2 run");
while (i < 0x0fffff)
{
data[i] = i;
m1.Set();
}
Console.WriteLine("t2 done");
});
Task.WaitAll(t1, t2);
int cnt = 0;
int min = 0x0fffff;
for (int j = 0; j < 0x0fffff; ++j)
{
if (data[j] != j)
{
min = Math.Min(min, j);
cnt++;
Console.WriteLine($"data[{j}]: {data[j]}");
}
}
Console.WriteLine($"min: {min}, count: {cnt}, {cnt * 1.0 / 0x0fffff}");