如何在同一时间锁定同一个类的2个不同方法?

时间:2015-02-14 16:34:27

标签: c# multithreading

我上课了:

public class petri {
    public int[] nodes = new int[3];
    public void petri (int n) {
        this.nodes[1] = n;
        this.nodes[2] = 0;
        this.nodes[3] = 0;
    }

    public bool start() {
        if (this.nodes[1] != 0) {
            this.nodes[1]--;
            this.nodes[2]++;
            return true;   
        } else
            return false;
    }

    public bool end() {
        if (this.nodes[2] != 0) {
            this.nodes[2]--;
            this.nodes[3]++;
            return true;   
        } else
            return false;
    }
}

我在并行线程中使用此类并且需要这样做:start() end()函数必须一次仅由1个线程使用。我的意思是,如果thread1调用start(),则thread2会一直运行,直到tread1结束执行start()并且此thread2之前无法调用start()并且端()

2 个答案:

答案 0 :(得分:1)

向对象添加一个对象字段以锁定并锁定要锁定在一起的每个方法中的此对象:

public class petri {
    private readonly object _lock = new object();

    public bool start() {
        lock(_lock)
        {
            // rest of method here
        }
    }

    public bool end() {
        lock(_lock)
        {
            // rest of method here
        }
    }
}

答案 1 :(得分:0)

使用信号量或同步方法(监控)

http://www.albahari.com/threading/part2.aspx