程式設計前一定要先分析好問題:該選取什麼樣的資料結構,資料結構應該具有怎樣的型別、怎樣的許可權?不要上手就一頓操作猛如虎,一看傷害零點五。
該實驗中,乙個猴子是乙個執行緒,而n架梯子是所有猴子共享的。所以梯子就定義為monkey類的靜態成員:
private final static listladders = new arraylist();
以及相應的get方法:
public static listgetladders();
呼叫時,直接呼叫monkey類,而不要呼叫具體的monkey物件來訪問這個方法:
monkey.getladders() // yes
new monkey().getladders() // no
多個類如果想使用同一把鎖,我還是建議把這同一把鎖設定成乙個靜態成員變數,比如可以建立乙個lock包,lock包裡有lock類,lock類中的成員變數都設定為static型別,這樣不同的類就很容易訪問同一把鎖了。不建議採用傳參的方式傳遞同一把鎖的引用。
本實驗中,兩岸的猴子選擇「上梯子策略」時必須共用一把鎖。否則,兩岸的猴子可能上同一把梯子,造成死鎖,那麼程式就無法結束。
另外,乙個梯子上的猴子用同一把鎖。6把梯子就6把鎖……因為猴子在決策時,要考慮同一把梯子上其他猴子的狀態(但不能使用上帝視角),他們之間互相影響。
策略模式參考文章:
寫得非常明白。
軟體構造 lab6吞吐率優化
為猴子選擇梯子時,其中的乙個策略是選擇距離起點最近的猴子速度最大的梯子。我以為這個方案吞吐率會很高,但實際執行時,在最後時刻經常出現這種情況 如圖,梯子1,2,3明明都是空的,但後上梯子的猴子還是只選擇梯子0.實際觀察會發現,在等待梯子1上所有猴子過河的過程中,吞吐率會有比較大的下降。gui上顯式的...
哈工大軟體構造實驗lab6
3.1 adt設計方案 設計了哪些adt 各自的作用 屬性 方法 給出每個adt的specification 可選 以類圖形式給出多個類之間的關係。梯子類 public class ladder public vectorgenerator int t,int k,int mv,int h 猴子產生...
Lab6 程序的排程
從就緒佇列中挑選下乙個占用cpu執行的程序,從多個可用cpu中挑選就緒程序可使用的cpu資源 比較排程演算法的準則 吞吐量與延遲 低延遲 喝水的時候想要一開啟水龍頭水就流出來 高頻寬 給游泳池充水時希望從水龍頭裡同時流出大量的水,並且不介意是否存在延遲 減少響應時間 減少平均響應時間的波動 增加吞吐...