实现多线程以在线程中执行for循环

时间:2016-12-21 10:46:16

标签: c# multithreading threadpool

我有一个包含65000个字符串的字符串列表。我需要循环遍历所有这些字符串并执行一些任务。运行for循环迭代65000次需要更多时间。所以我想开始4到5个线程,它们可以划分这个列表数据并单独执行10000到15000个数据。我已经了解了使用Thread类启动和中止线程。但我不清楚多线程和线程管理以及实现锁定机制,以便多个线程不会对相同的数据和执行顺序起作用。

我是线程概念的新手。请帮助。任何代码示例将不胜感激 感谢。

1 个答案:

答案 0 :(得分:3)

我建议 PLinq (Parallel Linq)作为第一次尝试:

  myList
    .AsParallel()
    .WithDegreeOfParallelism(4)
    .ForAll(item => MyRoutine(item));

另一个选项是Parallel.ForEach

  ParallelOptions op = new ParallelOptions() {
    MaxDegreeOfParallelism = 4,
  };

  Parallel.ForEach(myList, op, item => MyRoutine(item));

编辑:请注意,许多类不包含线程安全List<T>(请参阅下面的评论)。如果要将数据具体化到列表中,请使用 PLinq

执行此操作
  List<string> listStrings = myList
    .AsParallel()
    .WithDegreeOfParallelism(4)
    .Select(item => item.text.Substring(5, item.text.Length)))
    .ToList(); // <- this is thread safe