时间片轮转调度算法c++
时间: 2023-09-25 09:15:47 浏览: 34
下面是一个简单的时间片轮转调度算法的C++代码示例:
```cpp
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
// 进程结构体
struct Process {
int id; // 进程id
int burst_time; // 进程执行时间
int remaining_time; // 进程剩余执行时间
};
// 时间片轮转调度函数
void roundRobinScheduling(vector<Process>& processes, int quantum) {
int n = processes.size();
queue<Process> ready_queue;
int current_time = 0;
int total_waiting_time = 0;
int total_turnaround_time = 0;
// 将所有进程加入就绪队列
for (int i = 0; i < n; i++) {
ready_queue.push(processes[i]);
}
while (!ready_queue.empty()) {
Process current_process = ready_queue.front();
ready_queue.pop();
// 执行时间不超过时间片
if (current_process.remaining_time <= quantum) {
current_time += current_process.remaining_time;
total_waiting_time += (current_time - current_process.burst_time);
total_turnaround_time += current_time;
current_process.remaining_time = 0;
} else {
// 执行时间超过时间片
current_time += quantum;
current_process.remaining_time -= quantum;
total_waiting_time += (current_time - current_process.burst_time);
ready_queue.push(current_process);
}
}
// 输出平均等待时间和平均周转时间
cout << "Average waiting time: " << (float)total_waiting_time / n << endl;
cout << "Average turnaround time: " << (float)total_turnaround_time / n << endl;
}
// 测试函数
int main() {
vector<Process> processes = {{1, 10, 10}, {2, 5, 5}, {3, 8, 8}};
int quantum = 2;
roundRobinScheduling(processes, quantum);
return 0;
}
```
上面的代码中,`Process` 结构体表示进程,包括进程id、执行时间和剩余执行时间。`roundRobinScheduling` 函数是时间片轮转调度算法的核心实现,使用一个队列来模拟就绪队列。`quantum` 表示时间片大小。在主函数中,创建了三个进程,并调用 `roundRobinScheduling` 函数进行调度。最终输出平均等待时间和平均周转时间。