我有一个对象,一次只能由一个Thread使用.
例如,我的对象包含3个方法A,B和C,如果线程访问方法A,我想锁定对象(所有方法/属性都被锁定).
主要的困难是我无法修改该对象的代码.我必须在我调用对象的地方阻止多线程访问.
我的第一个想法是使用单例模式,但我没有设法让它工作!
解决方法:
如果无法更改对象的代码,则必须处理对象外部的锁定.例如,您可以将其封装在另一个类中(可能将其隐藏在接口后面),并让该包装类应用同步:
public class Foo {
private readonly YourType tail;
private readonly object syncLock = new object();
public Foo(YourType tail) {this.tail = tail;}
public A() { lock(syncLock) { tail.A(); } }
public B() { lock(syncLock) { tail.B(); } }
public C() { lock(syncLock) { tail.C(); } }
}