用c++写一个先来先服务算法实现作业调度的设计的程序
时间: 2024-09-06 16:05:22 浏览: 37
先来先服务(FCFS, First-Come, First-Served)算法是一种简单的作业调度算法,按照作业到达的顺序进行调度。以下是一个简单的C++程序实现,用于演示如何使用FCFS算法对作业进行调度:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
// 定义作业结构体
struct Job {
int id; // 作业ID
int arrival; // 到达时间
int duration; // 执行时间
int completion; // 完成时间
};
// 比较函数,用于按到达时间排序作业
bool compareByArrival(const Job& a, const Job& b) {
return a.arrival < b.arrival;
}
// 执行FCFS作业调度算法
void FCFS(std::vector<Job>& jobs) {
// 首先按照到达时间对作业进行排序
std::sort(jobs.begin(), jobs.end(), compareByArrival);
int currentTime = 0; // 当前时间
// 遍历作业列表
for (Job& job : jobs) {
// 如果当前时间小于作业到达时间,则将当前时间设置为作业到达时间
if (currentTime < job.arrival) {
currentTime = job.arrival;
}
// 计算作业完成时间
job.completion = currentTime + job.duration;
// 更新当前时间到作业完成时间
currentTime = job.completion;
}
}
// 打印作业调度结果
void printJobs(const std::vector<Job>& jobs) {
for (const Job& job : jobs) {
std::cout << "作业ID: " << job.id << ", "
<< "到达时间: " << job.arrival << ", "
<< "执行时间: " << job.duration << ", "
<< "完成时间: " << job.completion << std::endl;
}
}
int main() {
// 创建作业列表
std::vector<Job> jobs = {
{1, 0, 5}, // 作业ID为1,到达时间为0,执行时间为5
{2, 2, 3}, // 作业ID为2,到达时间为2,执行时间为3
{3, 4, 1} // 作业ID为3,到达时间为4,执行时间为1
};
// 执行FCFS算法
FCFS(jobs);
// 打印作业调度结果
printJobs(jobs);
return 0;
}
```
这个程序首先定义了一个`Job`结构体来存储作业的ID、到达时间、执行时间以及完成时间。然后定义了一个比较函数`compareByArrival`,用于在作业排序时按照到达时间进行比较。`FCFS`函数实现了先来先服务算法的核心逻辑,它首先将作业按到达时间排序,然后按照作业的到达和执行顺序计算完成时间。最后,`printJobs`函数用于输出作业的调度结果。
运行这个程序将会输出每个作业的调度结果,包括它们的ID、到达时间、执行时间和完成时间。
阅读全文