我正在寻找用于编码同步化操作的C#模式,包括对特定实体的两个不同数据库的写操作,这样我就可以避免在同一实体上同时进行操作的竞争条件。
例如线程1和线程2正在同时处理实体X上的操作。该操作将X的信息写入数据库A和数据库B。线程3正在对实体Y处理相同的操作。所需的行为是:
我想避免的行为是:
我可以在所有线程上使用互斥量,但我真的不想阻止其他实体的操作。
我建议使用简单锁(如果它在代码的一个区域中),因为它将处理不同的对象(即.net对象),但是具有相同的值(因为它是相同的实体),所以我宁愿使用实体的某种形式的代码。如果实体具有某种形式的代码,则可以使用它-例如:
避免通过多个线程同时处理同一对象的“标准”方法将与特定对象上的lock statement配合使用。锁定是在对象本身上获取的,因此当lock(X)
时lock(Y)
和!ReferenceEquals(X,Y)
是独立的。