小编Dan*_*Dan的帖子

C#并行编程与列表 - 读取线程安全吗?

我正在读一本关于并行编程的书,它说它不是线程保存,不使用锁而将元素添加到列表中,因为结果将是不可预测的.例如,如果我们必须将800,000个元素添加到列表中,则最终结果将少于800 000个元素.

现在我想知道是否是线程保存从列表中读取元素.例如,假设我有一个列表BlackListedNumbers

List<int> BlackListedNumbers = new List<int> {10, 50 ....... n}; 
//lets say there is 500 000 elements in the list
Run Code Online (Sandbox Code Playgroud)

和另一个Numbers包含10 000 000个数字的列表,显然我将使用parallel.Foreach来完成这个任务,我想要的是Final包含所有数字NumbersBlackListedNumbers列表不在列表中

List<int> finalList = new List<int>();
Parallel.ForEach(Numbrs, 
  num =>
    {
      if (!blackListedNumbrs.Contains(num))
      {
        lock (finalList)
        {
          finalList.Add(num);
        }
      }
  });
Run Code Online (Sandbox Code Playgroud)

我知道这不是完成这项工作的最有效方法,但我只是想说明问题.

所以我的问题是:是否保存线程以从List中读取结果blackListedNumbrs并获得100%准确的结果?

c# parallel-processing list

3
推荐指数
1
解决办法
4518
查看次数

标签 统计

c# ×1

list ×1

parallel-processing ×1