并行执行调用方法线程安全

时间:2016-10-04 18:09:23

标签: c# parallel-processing parallel.foreach

拥有以下内容:

List<Person> persons = // list of persons
Parallel.ForEach(persons, (i) => {
      AddAge(i);
});

// Does this method needs to be thread safe?
// Why?
public void AddAge(Person person)
{
    // Multiple threads execute here at once. However they're  
    // working with their own "person" object, therefore    
    // each thread won't corrupt others "person" object - is this assumption correct?
    person.Age =+ 10;
}
  • 由于每个人在他们自己的独立线程上“单独”更新,而且一个人与另一个人无关,AddAge()方法是否必须是线程安全的?
  • CLR是否为每个线程执行它自己的“AddAge()”副本 - 使它在线程之间分开?

1 个答案:

答案 0 :(得分:2)

线程安全涉及从多个线程修改相同的数据。如果您正在操作单独的数据(例如您的Parallel.ForEach)并且正确选择您的工作以便在依赖工作之前完成批处理,则您不需要在其中使用线程安全代码,因为您在方法之外执行线程安全(通过确保每个线程获得自己的一组数据来使用)。