请用C语言写一个时间片轮询的代码
时间: 2024-05-09 09:19:56 浏览: 114
以下是一个简单的时间片轮询的代码示例,假设每个进程的时间片为1秒:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define MAX_PROCESSES 10
typedef struct {
int pid;
int remaining_time;
} Process;
int main() {
int num_processes, quantum;
printf("Enter number of processes: ");
scanf("%d", &num_processes);
printf("Enter time quantum (in seconds): ");
scanf("%d", &quantum);
Process processes[MAX_PROCESSES];
int i;
for (i = 0; i < num_processes; i++) {
printf("Enter process %d execution time (in seconds): ", i+1);
scanf("%d", &processes[i].remaining_time);
processes[i].pid = i+1;
}
int curr_process = 0;
int num_completed_processes = 0;
while (num_completed_processes < num_processes) {
printf("Executing process %d...\n", processes[curr_process].pid);
sleep(quantum);
processes[curr_process].remaining_time -= quantum;
if (processes[curr_process].remaining_time <= 0) {
printf("Process %d completed.\n", processes[curr_process].pid);
num_completed_processes++;
curr_process++;
}
if (curr_process >= num_processes) {
curr_process = 0;
}
}
printf("All processes completed.\n");
return 0;
}
```
在该代码中,我们首先输入进程的数量和时间片的长度。然后,我们使用结构体数组存储每个进程的信息(PID和剩余执行时间)。在主循环中,我们使用sleep函数模拟进程执行,并在每个时间片结束时减少当前进程的剩余执行时间。如果进程的剩余执行时间为0,则将其标记为已完成,并将当前进程设置为下一个未完成的进程。如果当前进程是最后一个进程,则将其设置为第一个进程。当所有进程都完成时,程序结束。
阅读全文