PV操作原理:添加链接描述
前言:
在参加 中国计算机技术职业资格考试复习的时候,看到书中有一种对互斥与同步问题的解决方法,称为PV操作,具体的PV操作原理就不在这里赘述,不了解的小伙伴可以到置顶的链接中,看别的大佬的讲解,下面就是我在JS中进行的PV操作相关原理的实现代码块,如有需要的小伙伴可以进行参考~
// 使用时new新的PV对象 可最大信号量 可选设置互斥阀值
function PV(maxPV_Index,minPV_index){
// 创建最大信号量
this.PV_Index;
//创建互斥阀值
this.minPV_index = 0;
//创建整数正则
var reg = /^\d+$/;
// 对传入数据进行筛选
if(!reg.test(maxPV_Index)){
console.log("maxPV_Index not is a int");
}else{
this.PV_Index = maxPV_Index;
}
if(minPV_index!=null){
if(!reg.test(minPV_index)){
console.log("minPV_index not is a int");
}else{
this.minPV_index = minPV_index;
}
}
// 创建P操作方法
this.P = function(){
this.PV_Index = this.PV_Index-1;
}
// 创建V操作方法
this.V = function(){
this.PV_Index = this.PV_Index+1;
}
// 创建判断当前是否能够进行互斥操作方法
this.canDo = function(){
if(this.PV_Index>this.minPV_index){
return true;
}else{
return false;
}
}
//创建获得剩余互斥操作次数方法
this.getPV_Index = function(){
return this.PV_Index;
}
}
// 测试代码
var pv_One = new PV(5);
// 查询当前可使用资源数量
console.log(pv_One.getPV_Index());
// 进行P操作
pv_One.P();
console.log(pv_One.getPV_Index());
//进行V操作
pv_One.V();
console.log(pv_One.getPV_Index());
// 查看当前是否还能进行P操作
console.log(pv_One.canDo());
//测试不能进行P操作时的情况
while(pv_One.getPV_Index()>0){
pv_One.P();
}
console.log(pv_One.getPV_Index());
console.log(pv_One.canDo());