短进程优先调度算法C++
时间: 2023-07-11 21:06:40 浏览: 69
以下是短进程优先调度算法的 C++ 示例代码:
```c++
#include<bits/stdc++.h>
using namespace std;
struct Process {
int pid; // 进程标识符
int bt; // 执行时间
};
bool compare(Process a, Process b) {
return a.bt < b.bt;
}
void findWaitingTime(Process proc[], int n, int wt[]) {
// 等待时间初始化为0
wt[0] = 0;
// 计算每个进程的等待时间
for (int i = 1; i < n ; i++ )
wt[i] = proc[i-1].bt + wt[i-1] ;
}
void findTurnAroundTime(Process proc[], int n, int wt[], int tat[]) {
// 计算每个进程的周转时间
for (int i = 0; i < n ; i++)
tat[i] = proc[i].bt + wt[i];
}
void findavgTime(Process proc[], int n) {
int wt[n], tat[n], total_wt = 0, total_tat = 0;
// 计算等待时间
findWaitingTime(proc, n, wt);
// 计算周转时间
findTurnAroundTime(proc, n, wt, tat);
// 输出进程信息及各项指标
cout << "Processes " << " Burst time "
<< " Waiting time " << " Turn around time\n";
// 计算总等待时间和总周转时间
for (int i = 0; i < n; i++) {
total_wt = total_wt + wt[i];
total_tat = total_tat + tat[i];
cout << " " << proc[i].pid << "\t\t"
<< proc[i].bt << "\t\t " << wt[i]
<< "\t\t " << tat[i] << endl;
}
// 输出平均等待时间和平均周转时间
cout << "\nAverage waiting time = "
<< (float)total_wt / (float)n;
cout << "\nAverage turn around time = "
<< (float)total_tat / (float)n;
}
int main() {
// 进程数组
Process proc[] = { {1, 6}, {2, 8}, {3, 7}, {4, 3} };
int n = sizeof proc / sizeof proc[0];
// 按照执行时间排序
sort(proc, proc + n, compare);
cout << "Order in which processes will be executed:\n";
for (int i = 0 ; i < n; i++)
cout << proc[i].pid <<" ";
cout << endl;
findavgTime(proc, n);
return 0;
}
```
这段代码先定义了一个 Process 结构体,包含进程标识符(pid)和执行时间(bt)。然后定义了三个辅助函数,分别是计算等待时间、计算周转时间和输出进程信息及各项指标。最后主函数中先定义了一个进程数组,然后按照执行时间排序,并输出进程顺序。最后调用 findavgTime 函数计算各项指标并输出。
阅读全文