2011-12-04 1 views
0

クラスのラウンドロビンスケジューラを作成する必要があります。最初に、プロセスID、その到着時刻、および処理時間を表すリストを3 List<int>作成しました。私は到着時にそれらを並べ替えました。プロセスに固定クォンタムが割り当てられています(私はハードコーディングしたものを4にしました)、今度はそれらにRRを適用して、各プロセスのシーケンス順序を&の残りの時間をフォームのtextBoxに表示します。次のRoundRobinスケジューリングコードの実装

私はここに一つのアプローチを見つけたが、それはJavaである: https://stackoverflow.com/questions/7544452/round-robin-cpu-scheduling-java-threads

リンクに示されているが、基本的には、これまでのところ、私はオブジェクトのリストを作成することに成功してきたように、私は、オブジェクトのリストに私の3つのリストを変換してみましたプロセスを表す。各オブジェクトには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); 

をしかし、どのように、私はアイテムを見つけ、それを操作するために、リストの各値を検索しますか? bursttimeprocessname="P1"をアクセスして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'はラムダ式' x => x.processname == "P1" 'の入力パラメータです。 FirstOrDefaultを使用してhttp://msdn.microsoft.com/en-us/library/bb397687.aspx – Otiel

+0

を理解するには、nullを返す可能性を開きます。これは、bursttimeプロパティへのアクセス時に例外をスローすることになります –

関連する問題