首页 > 应用开发 > IT综合 > 链动2+1商城系统开发原理(源码搭建)
链动2+1商城系统开发原理(源码搭建) (I 89喂-o3oo-店2434)
该指令又称为对换指令,在Intel 80x86中又称为XCHG指令,用于交换两个字的内容。下面为伪代码。
void swap(boolean*a,boolean*b){
boolean temp;
temp=*a;
*a=*b;
*b=temp;
}
方法是为每个临界资源设置一个全局的布尔变量lock,初值为false,在每个进程中再利用一个局部变量key,利用swap指令实现进程互斥的循环进程,下面为伪代码描述。
do{
key=true;
do{
swap(&lock,&key);
}while(key!=false);
//临界区操作
lock=false;
}while(true);
利用上述硬件指令能够有效地实现进程互斥,但当临界资源忙碌时,其他访问进程必须不断地进行尝试,处于一种忙等的状态,不符合“让权等待”的原则,造成处理机时间的浪费,同时难以解决复杂问题。
接下来为java语言描述。
package chapter02;
//the class is the operation system's code
public class P057Swap{
private static int buffer;
private static boolean lock;
public static void main(String[]args){
lock=false;
buffer=0;
Thread prov=new ProvThreadClass();
prov.start();
Thread cust=new CustThreadClass();
cust.start();
}
public static boolean swap(boolean param){
boolean temp=lock;
lock=param;
param=temp;
//将替换的param参数回调回去
return param;
}
static class ProvThreadClass extends Thread{
Override
public void run(){
while(true){
//缓冲池满的话
if(buffer==10){
}
else{
boolean key=true;
do{
//将key值兑换,除非当前的lock为false的时候就可以跳出循环
key=swap(key);
}while(key!=false);
buffer+=1;
System.out.println("生产出1件产品,目前剩余产品个数:"+buffer);
lock=false;
}
try{
Thread.sleep(200);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
static class CustThreadClass extends Thread{
Override
public void run(){
while(true){
//缓冲池空的话
if(buffer==0){
}
else{
boolean key=true;
do{
//将key值兑换,除非当前的lock为false的时候就可以跳出循环
key=swap(key);
}while(key!=false);
buffer-=1;
System.out.println("消费1件产品,目前剩余产品个数:"+buffer);
lock=false;
}
try{
Thread.sleep(300);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69980703/viewspace-2945772/ ,如需转载,请注明出处,否则将追究法律责任。