/*搶占式優先級調度算法*/ #include <iostream> using namespace std; struct Num { int priority; //優先級 int dt; //到達時間 int st; //運行時間 int need_time; //還需運行的時間 }sum[5]={{2,0,3,3},{3,2,2,2},{5,2,5,5},{1,5,3,3},{4,8,1,1}}; int main() { int c=0; //記錄程序的執行個數 int time=0; //記錄時間 int b=100; //記錄上一個的程序 int a=100; while(c<5) { int p=100; //記錄優先級 for(int i=0;i<5;i++) { if(time>=sum[i].dt) //判斷當前可執行的程序 { if(p>sum[i].priority) //判斷優先級 { p=sum[i].priority;//更換優先級 a=i; //記錄當前可運行的優先級的值 } } } if(a!=b) //判斷當前的時間是否有程序可以運行 { //有 //判斷運行時間內是否有優先級更高的進來 int yxj = p; int a1=a; for(int i=0;i<5;i++) { if(time+sum[a].need_time>sum[i].dt&&a1!=i) //判斷當前可執行的程序 { if(yxj>sum[i].priority) //判斷優先級 { yxj=sum[i].priority; //更換優先級 a1=i; //記錄當前可運行的優先級的值 } } } if(yxj!=p) { //有優先級更高的 sum[a].need_time-=(sum[a1].dt-time); cout<<"***執行"<<a+1<<",被"<<a1+1<<"打斷。"<<a+1<<"還剩"<<sum[a].need_time<<endl; time=sum[a1].dt; cout<<time<<endl; b=a; } else { b=a; time+=sum[b].need_time; cout<<"執行程序"<<b+1<<";等待時間:"<<time-sum[b].dt-sum[b].st<<";完成時間:"<<time<<"。"<<endl; sum[a].priority=100; c++; } } else {//找不到時間+1 time++; } } return 0; }