c语言实现时间片轮转算法
时间: 2023-07-25 07:03:35 浏览: 99
下面是C语言实现时间片轮转算法的代码示例:
```c
#include <stdio.h>
#define MAX_PROCESS 10 // 最大进程数
#define TIME_QUANTUM 4 // 时间片长度
struct Process {
int pid; // 进程ID
int burst_time; // 进程运行时间
int remaining_time; // 剩余运行时间
};
int main() {
int n, i, j, time = 0;
struct Process processes[MAX_PROCESS];
int completed[MAX_PROCESS] = {0};
int num_completed = 0;
printf("请输入进程数:");
scanf("%d", &n);
// 输入每个进程的运行时间
for (i = 0; i < n; i++) {
printf("请输入进程 %d 的运行时间:", i + 1);
scanf("%d", &processes[i].burst_time);
processes[i].pid = i + 1;
processes[i].remaining_time = processes[i].burst_time;
}
while (num_completed < n) {
for (i = 0; i < n; i++) {
if (!completed[i]) {
printf("时间 %d:正在执行进程 %d\n", time, processes[i].pid);
for (j = 0; j < TIME_QUANTUM && processes[i].remaining_time > 0; j++) {
processes[i].remaining_time--;
time++;
}
if (processes[i].remaining_time == 0) {
printf("时间 %d:进程 %d 已结束\n", time, processes[i].pid);
completed[i] = 1;
num_completed++;
}
else {
printf("时间 %d:进程 %d 已执行 %d 个时间片,剩余时间为 %d\n", time, processes[i].pid, j, processes[i].remaining_time);
}
}
}
}
return 0;
}
```
在这个示例中,我们通过一个结构体数组来存储每个进程的相关信息,包括进程ID、进程运行时间和剩余运行时间。我们还使用一个布尔型数组来存储每个进程是否已经完成,以及一个计数器来记录已完成的进程数。
在主循环中,我们遍历所有进程,对于每个未完成的进程,执行一次时间片长度为4的运行,并更新其剩余运行时间。如果剩余运行时间为0,则将该进程标记为已完成,并将计数器增加1。如果剩余运行时间仍然大于0,则输出一条提示信息,表示该进程已经执行了多少个时间片,并将时间增加相应的值。
注意,在实际应用中,我们需要根据具体情况来选择时间片的长度,以保证算法的效率和公平性。
阅读全文