【发布时间】:2020-07-20 01:45:56
【问题描述】:
我正在尝试在 Java 中实现 2 阶段资源锁死锁预防算法。经过多次尝试,我决定创建一个 SimpleProcess 类,该类实现将充当我的线程的 Runnable 接口。 SimpleProcess 的结构有点像这样:
public class SimpleProcess implements Runnable
{
private int pid; // process id
private ArrayList<Integer> requiredRes; // originally required resources
private int[] remainingRes; // resources that are still required
private boolean status; // whether process is completed running or not
public SimpleProcess() {
pid = 0;
status = false;
}
public SimpleProcess(int id, ArrayList<Integer> res) {
pid = id;
requiredRes = res;
remainingres = requiredRes;
status = false;
}
public int getPid() {
return pid;
}
public int[] getRequiredRes() {
return requiredRes;
}
public int[] getRemainingRequiredRes() {
return remainingRes;
}
public boolean getStatus() {
return status;
}
public void run() {
System.out.println("Process " + pid + " started.");
// do something
System.out.println("Process " + pid + " is complete.");
}
}
我的主类将包含一个变量,该变量包含每个资源的锁定状态。这个变量被实现为final Lock[] locked_res = ReentrantLock[nr]。我需要帮助的是找到一种方法来共享这个相同的变量,其值可以由每个线程更改以在所有线程(SimpleProcess 实例)之间共享。
【问题讨论】:
标签: java concurrency thread-safety