2011-12-04 25 views
0

我必須爲一個類製作Round Robin調度程序。我最初創建了3個List<int>列表來表示進程id,它們的到達時間和處理時間。我按他們的到達時間對他們進行了分類這些進程被分配一個固定的量子(我已經硬編碼爲4),現在我想對它們應用RR,並將其剩餘時間的每個進程的順序順序顯示在表單上的textBox中。執行以下RoundRobin調度代碼

我找到了一種方法在這裏,但它是在Java: https://stackoverflow.com/questions/7544452/round-robin-cpu-scheduling-java-threads

我試着將我的三個名單爲對象列表,如圖中的鏈接,但基本上,到目前爲止,我已經成功地創建對象的列表代表過程。在每個對象中,存儲了processname,arrivaltime,bursttime。這是由一個叫做PCB的類來表示的。

現在我已經創建了一個列表,其中添加了一些過程:

public List<pcb> list = new List<pcb>(); // In place of ArrayList used in the 
             // example code in the link. 

//For loop runs in which above 3 parameters are assigned values & then they're 
// added to list: 

PCB pcb = new PCB(processname1, arrivaltime1, bursttime1); 
list.Add(pcb); 

但我怎麼在列表中的每個值,以便找到一個項目,並操縱它搜索?假設我想訪問processname="P1"bursttime並將其減少4?

這是在C#中它錯誤的數據結構?

+0

如何,你需要在列表中「訪問」的價值觀?你想遍歷列表,還是獲取特定索引的值? – millimoose

+1

我也刪除了'operating-system'標籤,因爲我在這個問題中看不到任何操作系統。如果我不正確,請隨時重新插入。 – Polynomial

+0

我想遍歷列表 –

回答

0
// To access the value: 
int bursttime1 = list.FirstOrDefault(x => x.processname == "P1").bursttime; 
// To change it: 
list.FirstOrDefault(x => x.processname == "P1").bursttime -= 4; 

如果你更喜歡通過列表迭代:

foreach (PCB pcb in list) { 
    if (pcb.processname == "P1") { 
     pcb.bursttime -= 4; 
    } 
} 
+0

謝謝你。我現在就去看看msdn上的FirstorDefault方法,你能解釋一下變量x被聲明爲什麼嗎? –

+0

'x'是lambda表達式'x => x.processname ==「P1」'的輸入參數。要理解:http://msdn.microsoft.com/en-us/library/bb397687.aspx – Otiel

+0

通過使用FirstOrDefault,您打開返回null的可能性,這將在訪問bursttime屬性時拋出異常 –