鏈動2+1商城系統開發原理(原始碼搭建)

fuxin3發表於2023-04-14

鏈動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部落格 ” ,連結:http://blog.itpub.net/69980703/viewspace-2945772/,如需轉載,請註明出處,否則將追究法律責任。

相關文章