我上课了:
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()并且端()
答案 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)
使用信号量或同步方法(监控)