想象一下我给出了这种结构的情况(请注意,这不能改变):
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。这是否意味着它只比较对象的地址?在这种情况下,不需要锁定。