Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Autoresetevent和++;我_C#_Autoresetevent - Fatal编程技术网

C# Autoresetevent和++;我

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

这个代码片段非常清楚,问题也很简单:为什么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[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}");