C# Int 类型线程不安全

之前统计报表算法做了一个优化,一个查询二十分钟导致客户端超时,优化到只需要5秒钟。后来发现for循环里数据合并的时候耗时,就用并行做优化。但是发现并行后丢居然数据(当然是因为List线程不安全)。
前几天写了一个demo如下,发现如果MAX很大时,count小于MAX,Int 居然是线程不安全的,即便是Int++;

        int count = 0;
        int MAX = 1000000;
        System.Threading.Tasks.Parallel.For(0, MAX, (i) =>
          {
              count++;
          });
        Console.WriteLine(count);
        Console.Read();

查看IL代码,i++需要 三条指令
ldloc.0
ldc.i4.1
add

有一个问题,如果不用并行,那么4核服务器只占用一个核,如果使用并行四核全上,那么会造成服务器CPU占用100%,造成假死。。那到底用不用并行呢。。

原文地址:https://www.cnblogs.com/zifeiniu/p/8623651.html