推 jas1123kimo:剛剛才看到,感恩,了解了會再回! 12/14 13:35
※ 引述《jas1123kimo (傑森)》之銘言:
: 目的:3 部列表機被 n 個 process 共享,設計
: monitor 去支配三部列表機依照 process
: 之 priority number(值越大優先權值越高)
: 宣告.....
: request演算法中:
: void request printer(int proc_number)
: {
: if (num avail > 0) {
: num avail--;
: return;
: }
: waiting[num_waiting] = proc_number;
: num_waiting++;
: sort(waiting);
這裡是將現在的process的號碼放進等待的陣列中
因為process的號碼越大優先權越大,所以做了一次sorting
所以可以猜那個sorting是由大排到小吧
: while (num avail == 0 || waiting[0] != proc_number) do
: c.wait(proc_number);
如果可以用的printer數量是0或是優先權最大(wainting[0])的process不是自己
就繼續等,直到可用數量大於0而且自己是等待陣列中最大優先權的
: waiting[0] = waiting[num_waiting-1];
: num_waiting--;
: sort(waiting);
: num_avail--;
這裡是離開迴圈,拿到使用權,並且離開等待陣列
通常是把陣列的每一個往前移一格
但因為這不是FIFO的排隊,所以直接從最後一個拿到最前面,再sorting就好
: }
: 從waiting[num_waiting]之後我就看不懂了= =有人可以解釋一下嗎,感恩!
: PS.跟洪逸教得不太一樣,好像是原文書的
應該是這樣吧...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.251.217.50