BNB燃燒代幣模式專案系統開發原理(原始碼搭建)

a1271916008發表於2023-04-13

BNB燃燒機制模式專案開發講解功能開發分析


該指令又稱為對換指令,在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/69983064/viewspace-2945530/,如需轉載,請註明出處,否則將追究法律責任。

相關文章