【正文】
信息的完整通路。設(shè)備狀態(tài)保存在設(shè)備控制表(DeviceTable)中,并動(dòng)態(tài)的記錄狀態(tài)的變化及有關(guān)信息。按先來先服務(wù)的算法,進(jìn)行設(shè)備分配。把設(shè)備分配給進(jìn)程。當(dāng)進(jìn)程運(yùn)行完畢后,要釋放設(shè)備,則系統(tǒng)必須回收,一邊其他進(jìn)程使用。DeviceTable 是設(shè)備分配表,說明設(shè)備的分配狀況,是否被占用。每個(gè)設(shè)備是否被使用,哪個(gè)進(jìn)程在使用該設(shè)備,哪些進(jìn)程在等待使用該設(shè)備。如果空閑,則調(diào)用該設(shè)備;如果設(shè)備正被使用,則將該進(jìn)程阻塞到該設(shè)備的阻塞隊(duì)列中,等到設(shè)備空閑時(shí),再被喚醒,調(diào)用設(shè)備。Cpu 函數(shù)中調(diào)用 Equipment 模塊中的函數(shù)對(duì)設(shè)備進(jìn)行檢測(cè)。 算法通過調(diào)用 Equipment 模塊中的函數(shù)對(duì)設(shè)背進(jìn)行檢測(cè):如果設(shè)備空閑,則使用該設(shè)備;如果設(shè)備正在工作,則進(jìn)程被阻塞。此模塊中有一個(gè)設(shè)備調(diào)用函數(shù) public int Allocate(DeviceType type),根據(jù)設(shè)備的物理名調(diào)用設(shè)備,并將信息顯示顯示到界面中。四 程序設(shè)計(jì)與實(shí)現(xiàn) 程序流程圖YNNNY執(zhí)行的進(jìn)程根據(jù)設(shè)備的物理名調(diào)用設(shè)備設(shè)備 a 是否空閑設(shè)備 b 是否空閑設(shè)備 c 是否空閑進(jìn)程結(jié)束,回收設(shè)備Y將該進(jìn)程放到設(shè)備 a 的阻塞隊(duì)列中將該進(jìn)程放到設(shè)備 b 的阻塞隊(duì)列中將該進(jìn)程放到設(shè)備 c 的阻塞隊(duì)列中圖 41 基本思想進(jìn)程調(diào)用設(shè)備。再調(diào)用 B 類設(shè)備, B 類設(shè)備一共有兩個(gè),如果有空閑的設(shè)備,則進(jìn)程就可調(diào)用;否則將進(jìn)程阻塞到設(shè)備 B 的阻塞隊(duì)列中,等待設(shè)備,等到 B 類設(shè)備有空閑設(shè)備時(shí),就喚醒該進(jìn)程,在斷點(diǎn)處繼續(xù)進(jìn)行程序。 定義的公共變量或數(shù)據(jù)結(jié)構(gòu)Anum,Bnum,Cnum 分別表示設(shè)備 A,B,C 空閑數(shù)目public enum DeviceType 枚舉型的數(shù)據(jù)類型 列舉出三種設(shè)備public struct DeviceTable 定義一個(gè)設(shè)備表的結(jié)構(gòu)體 public class Device 設(shè)備類public bool JudgeDevice(DeviceType type) 檢查類型為 type 的設(shè)備是否可用public int Allocate(DeviceType type) 分配設(shè)備,返回第幾個(gè)設(shè)備被占用public void DeAllocate(DeviceType type, int a) 回收設(shè)備 實(shí)驗(yàn)部分代碼namespace WindowsApplication2{ public partial class Form1 : Form { public static int Anum = 3, Bnum = 2, Cnum = 1。 public int total。 //0——空閑,1——占用 public DeviceTable(DeviceType type, int total) //定義一個(gè)構(gòu)造函數(shù) { = total。 useState = new int[total]。 i total。 } } } public class Device { private DeviceTable[] table = new DeviceTable[3]。 public Device() { InitDevice()。 table[1] = new DeviceTable(, 2)。 } // /////////////////檢查類型為type的設(shè)備是否可用////////////////////// // public bool JudgeDevice(DeviceType type) { bool str = false。 } break。 } break。 } break。 } // ////////////分配設(shè)備,返回第幾個(gè)設(shè)備被占用//////////////////////// //