更改对象属性时锁定对象比较

时间:2017-05-02 14:19:33

标签: c# multithreading locking

想象一下我给出了这种结构的情况(请注意,这不能改变):

struct Point { ... }
class MyClass 
{
   public Point _point;
}

此结构用于在多个线程上运行的程序。字段 _point 在并行处理期间被修改(意味着它被读取和写入),因此在访问该字段时我需要锁定给定对象 - 这是通过这样做来实现的(I' m使用锁定对象,我也不想改变它:)

MyClass myObject = new MyClass();
lock (myObject)
{
   myObject._point = ...;
}

这一切都很好。虽然在某个地方(仍然在并行过程中)我有这样的比较:

MyClass anotherObject = new MyClass();
if (myObject == anotherObject)
{
  DoSomething();
}

注意,= _运算符在MyClass中没有重载。所以,我的最终问题是我是否需要锁定这两个对象( myObject anotherObject )才能进行比较,或者只是将它保留下来好吗? base ==运算符真正做了什么?根据文档,它"如果它的两个操作数引用同一个对象" ,则返回true。这是否意味着它只比较对象的地址?在这种情况下,不需要锁定。

0 个答案:

没有答案