C#阻止从其他线程访问所有对象方法

我有一个对象,一次只能由一个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(); } }
}
上一篇:对象锁定私有类成员 – 最佳实践? (JAVA)


下一篇:c# – 如何在多线程上下文中使方法独占?